public void testDefinitionValue() throws Exception {
WordModule module = new WordModule();
module.getDefinition("pugnacious");
Timer timer = new Timer() {
public void run() {
String value = module.getOutputLabel().getText();
String control = "inclined to quarrel or fight readily;...";
assertEquals("should be " + control, control, value);
finishTest();
}
};
timer.schedule(200);
delayTestFinish(500);
}
正如您所見,Timer 的 run() 方法是我真正驗證 Ajax 應用程序功能及其應用遠程過程調用的地方。請注意 run 方法的最后一步是調用 finishTest() 方法,它意味著一切如預期運行,JUnit 可以不受阻塞正常運行。在實踐中,您可能會發現需要根據異步行為完成所需的時間調整延遲時間。但用 JUnit 測試 GWT 應用程序的要點在于:您能夠在無需 部署完整功能的 Web 應用程序的情況下測試它。因此,您能夠更早地 并且更 頻繁地 測試您的 GWT 應用程序。
運行 GWT 測試
使用 GWT 進行功能測試
像本文演示的這類簡單 Ajax 應用程序可以 從功能角度進行驗證,使用包括 Selenium 在內的框架,它會驅動瀏覽器模擬實際用戶行為。不過,要想用 Selenium 運行功能測試,您必須部署完整功能的 Web 應用程序。
前面我曾提到,如果您想實際運行您的 GWT JUnit 測試,您必須執行大量瑣碎的工作來配置運行環境。比如說,要想通過 Ant 的 junit 任務運行我的測試,我就必須確保某些文件位于類路徑中并向低層 JVM 提供一個參數。特別是,在調用 junit 任務時,我還要確保托管源文件(以及測試)的目錄(或多個目錄)位于類路徑中,還要告訴 GWT 以何種模式運行。我傾向于使用 hosted 模式,這意味著要使用 www-test 標志,如清單 7 所示:
清單 7. 用 Ant 運行 GWT 測試
<junit dir="./" failureproperty="test.failure" printSummary="yes"
fork="true" haltonerror="true">
<jvmarg value="-Dgwt.args=-out www-test" />
<sysproperty key="basedir" value="." />
<formatter type="xml" />
<formatter usefile="false" type="plain" />
<classpath>
<path refid="gwt-classpath" />
<pathelement path="build/classes" />
<pathelement path="src" />
<pathelement path="test" />
</classpath>
<batchtest todir="${testreportdir}">
<fileset dir="test">
<include name="**/**Test.java" />
</fileset>
</batchtest>
</junit>
運行 GWT 測試現在轉變成調用問題了。還需注意的是 GWT 測試屬于輕量級測試, 所以我可以頻繁運行測試,甚至是連續運行,就像我在一個持續集成環境(Continuous Integration)中一樣。
結束語
在本文所示的 GWT 測試用例中,您已經看到用于驗證 Ajax 應用程序所需的基本步驟。您可以繼續測試我的示例 GWT 應用程序,比如測試一些邊界用例,但是我認為重點在于:如果使用包含測試特性的框架編寫 Ajax 應用程序,測試要比想象中容易。
要對 GWT 應用程序進行良好測試(對絕大多數應用程序也適用),關鍵在于設計應用程序時要把測試一并考慮。還要注意 GWTTestCase 不是被用來進行交互測試的。您不能使用 GWTTestCase 直接模擬用戶。不過您能夠以一種間接的方式用它來驗證用戶交互,正如本文中演示的那樣。
文章來源于領測軟件測試網 http://www.kjueaiud.com/