追求代码质量: 使用 Selenium 和 TestNG 进行编程式测试
2009-11-19 00:00:00 来源:WEB开发网测试细节
创建一个 DbUnit fixture 并在测试级别上运行,这意味着运行任何测试之前,测试类的集合将共享相同的逻辑,为数据库正确地播种。在本文的示例中,在运行每个逻辑测试集合前,我希望数据库具有一组干净的数据。使用 DbUnit 的 CLEAN_INSERT 命令确保在先前运行的测试中创建的行被删除掉 —— 因此,我可以重新运行测试,该测试可以不断创建数据并且不用考虑数据库约束。
此外,我希望 fixture 能够依赖参数化数据,这使我在运行某个测试之前,能够灵活地切换种子文件,甚至是特定数据库的位置。将 TestNG 与参数相关联起来再简单不过了:我所需做的仅仅是使用 Parameters 注释装饰 fixtrue,声明方法签名中相应的参数,并提供 TestNG 配置文件中的值。
清单 8 定义了一个简单的 DbUnit fixture,它使用所需的种子文件播种数据库。请注意:该 fixture 被定义为包含五个 参数。(这可能非常多,但是在 fixture 中包含参数不是很好吗?)
清单 8. 测试集合的 DbUnit fixture public class DatabaseFixture {
@Parameters({"seed-path","db-driver","db-url","db-user","db-psswrd"})
@BeforeTest
public void seedDatabase(String seedpath, String driver,
String url, String user, String pssword) throws Exception {
IDatabaseConnection conn = this.getConnection(driver, url, user, pssword);
IDataSet data = this.getDataSet(seedpath);
try {
DatabaseOperation.CLEAN_INSERT.execute(conn, data);
}finally {
conn.close();
}
}
private IDataSet getDataSet(String path) throws IOException, DataSetException {
return new FlatXmlDataSet(new File(path));
}
private IDatabaseConnection getConnection(String driver,
String url, String user, String pssword ) throws ClassNotFoundException,
SQLException {
Class.forName(driver);
Connection jdbcConnection =
DriverManager.getConnection(url, user, pssword);
return new DatabaseConnection(jdbcConnection);
}
}
更多精彩
赞助商链接