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

标签 c# unit-testing nunit

我被要求编写一个测试应用程序,该应用程序需要在数据库中的多行上测试一个新的存储过程,从本质上讲,我想执行以下操作:

[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"]);
    }
}
当我运行此测试时,如果一行与另一行不匹配,则整个测试将失败;否则,整个测试将失败。相反,我想计算断言的传递次数和失败的次数。有没有办法用NUnit做到这一点?
我意识到NUnit可能会过大,如果没有它,这是一个简单的任务……我只是想学习它。 ;)

最佳答案

1)如果ID不变且在测试运行时未查找,请为每个ID创建一个单独的单元测试夹具。这样,您将知道哪些ID实际上是失败的。有关数据驱动测试的问题,请参见此处:
http://googletesting.blogspot.com/2008/09/tott-data-driven-traps.html

2)如果您需要动态查找ID,从而无法为每个ID创建固定装置,请使用akmad的建议进行一次更改。保留ID值不相等的列表,并将该列表添加到错误消息中。诊断仅说明错误数量的失败测试将非常困难,因为您将不知道是什么ID导致了错误。

3)我不知道在NUnit中将有多么困难,但是在PyUnit中,当我们需要对动态生成的数据运行测试时,我们会动态创建测试装置并将其附加到TestCase类,从而导致失败对每个不合格的数据进行测试。虽然我认为如果没有python的动态功能,这将更加困难。

关于c# - NUnit:在单个测试中运行多个断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/167567/

相关文章:

c# - 从 C# 代码运行单个 TestFixtures

.net - 集成测试

.net - NUnit 全局初始化 - 坏主意?

C#8 可空和不可空引用类型 - 仅当输入可为空时输出可为空

c# - .Net Garbage Collector - 查看在运行时提升到 Gen2 的内容

c# - 如何将触发器分配给 C# 中的变量?

python - 测试 protobuf 消息中是否存在重复字段

c# - Visual Studio 生成操作的当前类型 - Microsoft.VisualStudio.Shell.Interop

java - 如何在不定义 equals() 和 hashCode() 的情况下比较自定义类列表?

c# - NUnit 2016 抛出.TypeOf