其他測試方式
在某些情況下,基于 Action 類中發現的對應邏輯,可能能夠用基于 Web 的測試框架(像 JWebUnit 或 Selenium)間接地 測試代碼。使用這些框架從測試設置的角度來說,確實增加了復雜性。例如,要使用 JWebUnit,必須把應用程序部署到一個運行著配置好的數據庫的 servlet 容器。把 StrutsTestCase 和 DbUnit 協同使用,可以方便測試,不必 把 war 文件部署到運行著的 servlet 容器。它還允許在不 考慮應用程序的視圖方面的情況下進行測試。
關于邏輯映射
正確地配置了 MockStrutsTestCase 的實例后,測試 Action 類就只包含一點點邏輯映射。要調用 Action 類,需要強制 StrutsTestCase 框架通過一個路徑間接地 調用它,這是在 struts-config.xml 文件中定義的。
例如,要強制調用 ChangePasswordAction 類,必須告訴框架使用 /changePasswordSubmit 路徑。在清單 5 中可以看到這點,清單 5 中的代碼片段來自 struts-config.xml 文件,它把 ChangePasswordAction 類映射到 /changePasswordSubmit 路徑:
清單 5. struts-config.xml 代碼片段顯示了動作類路徑映射
type="com.acme.ccb.action.ChangePasswordAction"
name="changePasswordForm" scope="request"
input="/jsp/admin/changepassword.jsp">
<forward name="success" path="/viewUsers.do"
redirect="true" contextRelative="false" />
</action>
一旦某個用戶點擊了提交按鈕(舉例),Struts 就把來自 HTTP 請求的參數值映射到 ActionForm,在這個示例中,是上面的 struts-config.xml 代碼片段中(在清單 5 中)定義的 ChangePasswordForm。要模擬這個行為,在測試用例中必須有另一個邏輯映射 —— JSP 表單名稱必須映射到值。在口令修改場景中,提交了四個參數:username、currentPassword、newPassword1 和 newPassword2( newPassword2 參數是多數 Web 頁面為了校驗新口令正確的確認信息)。
成功的測試用例!