当前位置:  开发笔记 > 编程语言 > 正文

NUnit:在单个测试中运行多个断言

如何解决《NUnit:在单个测试中运行多个断言》经验,为你挑选了2个好方法。

我被要求编写一个测试应用程序,需要在数据库中的多行上测试一个新的存储过程,本质上我想做这样的事情:


[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可能有点矫枉过正,如果没有它,这是一个简单的任务......我只是想学习它.;)



1> akmad..:

好像你只是断言错误的东西.如果要检查所有值,然后断言没有错误(或显示错误数),请尝试以下操作:

[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.");
}



2> Mark Roddy..:

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的动态能力,这将会更加困难.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有