17

测试 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

4 回答 4

14

如果您希望单独测试 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 所说,“不要测试框架!”

于 2009-01-06T02:39:47.217 回答
8

作为替代方案,您应该尝试gwt-test-utils,它设法在独立的 JVM 中运行 GWT 客户端代码,并提供一些功能来模拟您想要的任何东西(组件、RPC 服务等)。

于 2011-03-24T08:46:13.230 回答
4

什么对我有用:

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

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

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

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

于 2009-05-12T16:03:26.167 回答
4

还可以阅读使用 Google Web Toolkit 的测试方法

于 2009-11-26T17:03:34.827 回答