setRequestPathInfo() 方法配置路徑以映射到 Action 類,addRequestParameter() 方法把來自 JSP 文件的參數名稱映射到值。例如,在清單 6 中,username 參數映射到 “jane”。
還請注意清單 6 中的最后兩行。actionPerform() 方法實際上讓 Struts 去調用對應的 Action 類。如果這個方法沒被調用,什么也不會發生。最后調用的方法 verifyForward() 是在 MockStrutsTestCase 類中找到的一個類似于斷言的方法,它驗證正確的轉發。在 Struts 中,這是一個 String,通常映射到成功或失敗狀態。(請注意,清單 5 中的 XML 定義了 “success” 轉發。)
用 DbUnit 進行的可重復的成功
這時,您可能希望工作完成 —— 畢竟已經編寫了一個企圖驗證口令修改的測試。但是還缺乏更深的驗證。確實,這個方便的框架調用了 Struts,但是代碼依賴于數據庫。如果希望能夠不止一次地運行這個測試,比如在構建過程中,就需要讓它可重復。
由于一些特定的假設,所以 清單 6 中的測試用例不是可重復的。首先,測試用例假設在系統中已經 有一個名為 “jane” 的用戶,它的口令是 “admin”。其次,測試用例假設在某些永久存儲 中口令 “admin” 被更新成 “meme”。正如所寫的那樣,只要代碼沒有生成異常,ActionForm 成功驗證,Struts 就假定事情工作良好,測試用例也是一樣。
現在需要的是更深層次的驗證 —— 在數據庫層次。對于應當更新口令的測試用例來說,理想情況下應當在數據庫上 執行檢查,確保那里有一個新口令。對于口令不應當修改的測試來說,需要進行驗證,真正檢驗沒有修改 口令。最后,要讓這個測試套件可重復,最好是不要 對數據完整性做任何假設。
DbUnit 是個專門方便把數據庫放進測試狀態中已知狀態的 JUnit 擴展。使用 XML 種子文件,可以把特定數據插入到測試用例可以依靠的數據庫中。而且,使用 DbUnit API,可以容易地比較數據庫的內容和 XML 文件的內容,從而提供一個在應用程序代碼之外 校驗預期數據庫結果的機制。
用 DbUnit 進行測試
要使用 DbUnit,需要兩樣東西:
通過普通 JDBC 的數據庫連接
一個文件,包含需要放到數據庫中的數據
清單 7 是一個 DbUnit 種子文件,只定義了幾樣東西:首先,有一個叫做 user 的表和另一個叫做 user_role 的表。在 user 表中定義了一個新行,并映射一些值到列(例如列 username 擁有值 “jane”)。在 user_role 中還定義了一行。請注意這個數據庫中的口令是通過 SHA 加密的。
清單 7. 用于測試表 user 和 user_role 的 DbUnit 種子文件
<?xml version='1.0' encoding='WINDOWS-1252'?>
<dataset>
<!-- user with password admin -->
<user username="jane"
password="d033e22ae348aeb5660fc2140aec35850c4da997"
name="Jane Admin"
date_created="2003-8-14 10:10:10"
email="jane@elsewhere.org"/>
<user_role username="jane" rolename="ADMIN"/>
</dataset>
文章來源于領測軟件測試網 http://www.kjueaiud.com/