追求代码质量: 测试 Struts 遗留的应用程序
2009-11-19 00:00:00 来源:WEB开发网清单 8 中定义的 executeSetUpOperation() 方法将在前面的 清单 4 中定义的 setUp() 方法中调用。这个方法再调用清单 8 中的另两个方法:getDataSet() 把 XML 转换成 DbUnit 的 IDataSet 类型,getConnection() 则返回包装成 DbUnit 的 IDatabaseConnection 类型的数据库连接。
更好的测试用例
配置好 DbUnit 后,剩下的就只有改进 清单 6 的测试用例,验证数据库中的一切 OK。然后,添加验证其他问题场景的其余测试用例。
要确认数据库中的口令更新,可以使用 DbUnit 的查询 API,它帮助比较数据库的结果与静态定义的 XML 文件,例如清单 9 中定义的那个。请注意这个文件没有列出 user 表中的所有列 —— 实际上,它只列出了两个:username 和 password。
清单 9. 比较测试 XML 文件<?xml version='1.0' encoding='WINDOWS-1252'?>
<dataset>
<user username="jane"
password="58117e24e4d0b8a958146c9eaa28336184f4d491"/>
</dataset>
DbUnit 的查询 API 足够灵活,可以帮助过滤掉没有意义的值,在这个示例中就是 username 和 password 之外的值。同样,在清单 10 中,verifyPassword() 方法用 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);
}
更多精彩
赞助商链接