是否可以参数化nunit测试

New*_*mer 35 c# nunit

我想编写一个可调用的函数来接受两个对象,并将这些对象的30多个属性与断言进行比较.问题是需要对大约20个现有单元测试和大多数未来测试进行此操作,并且每次写出30多个断言都耗费时间和空间.

我目前有一个非单元测试函数,用于比较对象,并返回带有"pass"或失败消息的字符串,并使用断言在每个单元测试中验证.然而,它非常混乱,我觉得我反对正确的单元测试方法.

有没有办法制作一个可以从使用断言来检查条件的单元测试中调用的函数?

sta*_*k72 48

如果您使用的是NUnit 2.5.5或更高版本,则可以使用TestCase属性.

正常单元测试将使用[Test]进行修饰,但我们可以将其替换为如下:

[TestCase("0", 1)]
[TestCase("1", 1)]
[TestCase("2", 1)]
public void UnitTestName(string input, int expected)
{
    //Arrange

    //Act

    //Assert
}
Run Code Online (Sandbox Code Playgroud)

这种类型的东西将是这样做的方式 - 显然采取不同的参数.

请查看此帮助:http://nunit.org/?p = testCase&r = 2.5


Mas*_*sif 32

要回答最后一部分,你当然可以在另一个函数中使用Asserts.断言通过引发测试运行器捕获的异常并将其解释为失败来进行工作,因此像这样的测试将正常工作:

public void CheckAsserts(string value)
{
    Assert.IsNotNull(value);
}

[TestCase("yes!")]
public void MyTest(string value)
{
    CheckAsserts(value);
}
Run Code Online (Sandbox Code Playgroud)