追求代码质量: 测试 Struts 遗留的应用程序
2009-11-19 00:00:00 来源:WEB开发网由于一些特定的假设,所以 清单 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>
更多精彩
赞助商链接