方法用 DbUnit 的 createQueryTable() 方法构建 ITable 类型,以与清单 9 中定义的 XML 进行比较:
清单 10. 使用 DbUnit 查询 API 的 verifyPassword 方法
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);
}
Assertion 类型是 DbUnit 定义的定制类,可以进行特定于数据库结果集的 额外断言。还请注意 verifyPassword() 接受一个文件路径,这意味着我可以定 义多个期望的数据集(一个用于修改的口令,一个用于相同的口令)。
反复测试 Struts
综合起来,现在有了一个可以完成以下工作的测试用例:
通过 DbUnit 填充数据库
配置 Struts
间接地调用 ChangePasswordAction 和 ChangePasswordForm 类
关联参数值
验证成功转发
验证数据库内容
追求代码质量 - 测试Struts遗留的应用程序(6)
时间:2010-12-12 IBM Andrew Glover
从清单 11 可以看出,ChangePasswordAction 测试用例只通过 testExecute 测试处理一个正常场景:
清单 11. ChangePasswordAction 测试用例
package test.com.acme.ccb.action;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.dbunit.Assertion;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.DataSetException;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ITable;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;
import servletunit.struts.MockStrutsTestCase;
public class ChangePasswordActionTest extends MockStrutsTestCase {
public ChangePasswordActionTest(String arg0) {
super(arg0);
}
public void setUp() throws Exception {
try {
super.setUp();
this.executeSetUpOperation();
this.setContextDirectory(new File("src/webapp/"));
this.setServletConfigFile("src/webapp/WEB-INF/web.xml");
this.setConfigFile(
this.getSession().getServletContext()
.getRealPath("WEB-INF/struts-config.xml"));
} catch (Exception e) {
fail("Unable to setup test");
}
}
public void testExecute() throws Exception{
setRequestPathInfo("/changePasswordSubmit");
addRequestParameter("username","jane");
addRequestParameter("currentPassword","admin");
addRequestParameter("newPassword1","meme");
addRequestParameter("newPassword2","meme");
actionPerform();
verifyForward("success");
verifyPassword("test/conf/dbunit-expect-user.xml");
|