2009-01-04 109 views

回答

14

如果您希望单独测试GWT小部件,则没有多少选项。您可以使用GWTTestCase实例化您的小部件并通过其API测试它,这是Google为GWT小部件本身所做的工作:Source for RadioButtonTest

但是,事件触发机制在GWTTestCases中不起作用,这意味着您可以不会像编程式地点击一个按钮,并期望在侦听器上调用一些onClick()回调方法。即使不是不可能获得底层DOM也很困难,所以它可能不是测试低级别HTML发布代码的最佳工具。

这听起来像你正在遵循所有正确的步骤; Rob的文章详细介绍了如何使用Model-View-Presenter(MVP)设计模式编写可测试代码。您离开视图层的逻辑越多越好。如果这不可行,请使用像Selenium这样的工具来创建动态UI行为的集中测试。

我遵循类似的策略 - 在小部件中使用最少代码的MVP。在一些情况下,我编写了一些代码来封装Grid类,所以我能够在GWTTestCase中实例化组件,将它传递给Grid,在组件上调用一些方法,并检查Grid的状态。我写了一篇关于Test-First GWT的更好的软件的文章,你可以阅读on my blog

如果您正在测试使用非UI GWT类(如URL编码或字典)的代码,则需要使用GWTTestCase,否则请遵循类似的包装策略,直到代码太简单而无法破解。然后使用像Selenium这样的工具进行集成测试,或者使用一些有针对性的GWTTestCases来测试您是否正确使用库 - 正如J.B. Rainsberger所说,“不要测试框架!”

4

什么为我工作:(在视图或控制器例如没有业务逻辑;控制器只翻译查看事件到方法的模型调用)

使用经典模型/视图/控制器。

将模型和控制器代码从GWT视图窗口小部件和任何其他依赖于GWT并且不能在普通的旧式JVM中实例化的类中分离出来。然后您可以使用良好的旧JUnit测试它们。

编写端到端测试以通过GUI测试系统,以确保模型和控制器正确连接到视图。我们发现,部署和启动应用程序的速度更快,然后通过由WebDriver从JUnit控制的浏览器与应用程序进行交互,而不是使用GWTTestCase!

使用JMock测试如下异步调用:http://www.jmock.org/gwt.html

+0

只需要我2分钱就可以运行我在Eclipse中使用JMock的一些GWT JUnit测试:我需要将gwt-dev.jar添加到某些使用JMock的特定JUnit测试类的类路径中;在这样做之前,这样的类有这个错误: java.lang.NoClassDefFoundError:com/google/gwt/core/shared/GWTBridge – cellepo 2014-01-20 21:00:02

8

读取作为alernative,你应该尝试gwt-test-utils,它设法在一个独立的JVM上运行GWT的客户端代码,并提供了一些功能来嘲笑你想要的任何东西(组件,RPC服务等..)

+0

使用gwt-test-utils试过。但它给:java.lang.RuntimeException:加载JavaScriptObject子类和Patcher实例时出错..任何想法 – MountainRock 2011-03-31 10:09:32

相关问题