return new FlatXmlDataSet(new File("test/conf/dbunit-user-seed.xml"));
}
private IDatabaseConnection getConnection() throws ClassNotFoundException, SQLException {
final Class driverClass = Class.forName("org.gjt.mm.mysql.Driver");
final Connection jdbcConnection = DriverManager.
getConnection("jdbc:mysql://localhost/ccb01",
"9043", "43xli");
return new DatabaseConnection(jdbcConnection);
}
private void verifyPassword(String fileName) throws Exception{
final IDataSet expectedDataSet = new FlatXmlDataSet(
new File(fileName));
final ITable defJoinData = this.getConnection().
createQueryTable("TestResult",
"select user.username, user.password " +
"from user where user.username=\"jane\"");
final ITable defTable = expectedDataSet.getTable("user");
Assertion.assertEquals(defJoinData, defTable);
}
}
請注意這個測試用例沒有測試邊界用例,例如:如果兩個口令字段(newPassword1
和 newPassword2()
)不匹配。謝天謝地,一旦設置好了,添加另一個測試用例并不難。在清單 12 中,驗證了如果兩個值不匹配,就生成 ActionError
,用戶 “jane” 口令在數據庫中的值保持不變。
public void testExecuteWithErrors() throws Exception{
setRequestPathInfo("/changePasswordSubmit");
addRequestParameter("username","jane");
addRequestParameter("currentPassword","admin");
addRequestParameter("newPassword1","meme");
addRequestParameter("newPassword2","emem");
actionPerform();
verifyActionErrors(
new String[]{"error.changePassword.passwordsDontMatch"});
verifyPassword("test/conf/dbunit-expect-user-same.xml");
}
在清單 12 中,我驗證了 清單 2 中的邏輯正確地捕捉到了口令值不匹配的情況。MockStrutsTestCase
類包含一個方便方法可以斷言錯誤條件,這個方法是 verifyActionErrors()
,在這個方法中,錯誤 String
被傳遞進來進行驗證。還請注意,數據庫被檢查,這次是根據另一個包含相同值的文件(在這個示例中,username
“jane” 有一個未加密的 password
“admin”)。
文章來源于領測軟件測試網 http://www.kjueaiud.com/