我被要求编写一个测试应用程序,需要在数据库中的多行上测试一个新的存储过程,本质上我想做这样的事情:
[Test]
public void TestSelect()
{
foreach(id in ids)
{
DataTable old = Database.call("old_stored_proc",id);
DataTable new_ = Database.call("new_stored_proc",id);
Assert.AreEqual(old.Rows[0]["column"],ne_.Rows[0]["column"]);
}
}
当我运行此测试时,如果1行与另一行不匹配,则整个测试失败; 相反,我想计算断言通过多少次以及失败多少次.有没有办法用NUnit做到这一点?
我意识到NUnit可能有点矫枉过正,如果没有它,这是一个简单的任务......我只是想学习它.;)
好像你只是断言错误的东西.如果要检查所有值,然后断言没有错误(或显示错误数),请尝试以下操作:
[Test] public void TestSelect() { int errors = 0; foreach(id in ids) { DataTable old = Database.call("old_stored_proc",id); DataTable new_ = Database.call("new_stored_proc",id); if (old.Rows[0]["column"] != new_.Rows[0]["column"]) { errors++; } } Assert.AreEqual(0, errors, "There were " + errors + " errors."); }
1)如果id是常量并且在测试运行时没有查找,则为每个id创建一个单独的单元测试夹具.这样你就会知道哪个id真的失败了.请参阅此处,了解数据驱动测试的问题:http:
//googletesting.blogspot.com/2008/09/tott-data-driven-traps.html
2)如果您需要动态查找id,使得无法为每个id创建一个fixture,请使用akmad的建议进行一次更改.保留值不相等的id列表,并将列表添加到错误消息中.诊断一个仅指出错误数量的失败测试将非常困难,因为您不知道哪个ID导致错误.
3)我不知道在NUnit中做的有多难,但在PyUnit中,当我们需要对动态生成的数据运行测试时,我们动态创建测试夹具并将它们附加到TestCase类,这样我们就失败了测试未通过的每个数据.虽然我想如果没有python的动态能力,这将会更加困难.