为什么不用编译成JavaScript就可以对GWT Widget进行单元测试?



对,我一直在开发一个应用程序,使用MVP框架,谷歌推荐的大规模应用程序开发和MVP。

一切都很好,我只是有一件事让我有点恼火(从理解的角度来看)。

在演示者中,Widget类在他们的示例中使用,在asWidget方法中。为什么在模拟视图和做基于jre的JUnit测试时,这不会造成问题?Widget的基类没有被编译成JavaScript吗?

当您运行测试时(没有GWTTestCase),它们只是普通的Java代码。GWT不会将任何东西翻译成JavaScript(只有DevMode、Compiler或GWTTestCase会这样做),所以Widget类是Eclipse(或其他)看到并允许您在代码中使用的类。

需要GWTTestCase的情况是,当您实际运行代码时,需要被翻译成JS(或类似地在带有JS引擎的"浏览器环境"中运行,在DevMode的情况下,GWTTestCase在dev模式下),也就是说,试图调用JSNI方法(就Java而言,这恰好是一个native方法)。只要您不尝试实际使用一个Widget,它不需要任何JSNI,所以它是安全的。

不,在调试或托管模式下它不会,这就是为什么您可以在eclipse中放置一个断点并看到它。当然,在幕后JavaScript是存在的,但对于用户来说它只是java,这个映射是由gwts引擎控制的。

您可以编写单元测试而不调用asWidget,或者您可以为该调用提供返回null的视图。

这样你就不需要在运行单元测试时使用JavaScript了

最新更新