测试GWT代码的最佳方法是什么?
托管模式下的GWTTestCase太慢,没有任何模拟框架可以工作.
目前我们按照http://robvanmaris.jteam.nl/2008/03/09/test-driven-development-for-gwt-ui-code/中的建议关注MVC,并使用GWTMockUtilities disarm()和restore()来模拟小部件.我们还没有想出一种在GWT MVC中测试View的方法.有没有更好的方法来测试GWT代码?
如果您希望单独测试GWT小部件,则选项不多.您可以使用GWTTestCase来实例化您的小部件并通过其API进行测试,这就是Google为GWT小部件本身所做的事情:RadioButtonTest的来源
但是,事件触发机制在GWTTestCases中不起作用,这意味着您无法以编程方式单击按钮并希望在侦听器上调用某些onClick()回调方法.如果不是不可能获得底层DOM也很难,因此它可能不是测试低级HTML发射代码的最佳工具.
听起来你正在遵循所有正确的步骤; Rob的文章提供了如何使用Model-View-Presenter(MVP)设计模式编写可测试代码的出色描述.您保留在视图层之外的逻辑越多越好.如果无法做到这一点,请使用Selenium之类的工具来创建动态UI行为的重点测试.
我遵循了类似的策略 - 在小部件中使用最少代码的MVP.在少数情况下,我写了一些代码来包装Grid类,所以我能够在GWTTestCase中实例化我的组件,传递一个Grid,在我的组件上调用一些方法,并检查Grid的状态.我为Better Software撰写了一篇关于Test-First GWT的文章,您可以在我的博客上阅读.
如果您希望测试使用非UI GWT类的代码(例如URL编码或字典),则需要使用GWTTestCase,否则请遵循类似的包装策略,直到代码过于简单而无法中断.然后使用像Selenium这样的工具进行集成测试,或者使用一些目标GWTTestCases来测试你正确使用库 - 正如JB Rainsberger所说,"不要测试框架!"
作为alernative,您应该尝试gwt-test-utils,它可以在独立的JVM中运行GWT客户端代码并为Mock提供一些功能(组件,RPC服务等).