测试GWT代码的最佳方法是什么

时间:2009-01-04 16:51:09

标签: gwt

测试GWT代码的最佳方法是什么?

托管模式下的GWTTestCase太慢,没有任何模拟框架可以工作。

目前我们按照http://robvanmaris.jteam.nl/2008/03/09/test-driven-development-for-gwt-ui-code/中的建议关注MVC,并使用GWTMockUtilities disarm()和restore()来模拟小部件。我们还没有想出一种在GWT MVC中测试View的方法。有没有更好的方法来测试GWT代码?

4 个答案:

答案 0 :(得分: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的状态。我为Better Software撰写了一篇关于Test-First GWT的文章,你可以阅读on my blog

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

答案 1 :(得分:8)

作为替代方案,您应该尝试gwt-test-utils,它可以在独立的JVM中运行GWT客户端代码并为Mock提供一些功能(组件,RPC服务等)。

答案 2 :(得分:4)

对我有用的是什么:

使用经典模型/视图/控制器(例如视图或控制器中没有业务逻辑;控制器仅将视图事件转换为模型上的方法调用)。

将模型和控制器代码与GWT视图窗口小部件以及依赖于GWT且无法在普通旧JVM中实例化的任何其他类解耦。然后,您可以使用旧的JUnit来测试它们。

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

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

答案 3 :(得分:4)