【问题标题】:Is it possible to parameterize a nunit test是否可以参数化 nunit 测试
【发布时间】:2011-06-16 15:37:56
【问题描述】:

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

我目前有一个非单元测试函数来比较对象,并返回一个带有“通过”或失败消息的字符串,并在每个单元测试中使用断言来验证它。然而,它相当混乱,我觉得我违背了正确的单元测试方法。

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

【问题讨论】:

标签: c# nunit


【解决方案1】:

如果您使用的是 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
}

这种类型的事情将是这样做的方式 - 显然需要不同的参数。

看看这个寻求帮助:http://nunit.org/?p=testCase&r=2.5

【讨论】:

  • 问题是,我的测试用例不是静态的。我有一个手动填充的对象,一个从我想要比较的数据库中填充。
  • expected 应该是参数化测试的返回类型,您应该为测试用例提供返回值而不是参数。
【解决方案2】:

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

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

[TestCase("yes!")]
public void MyTest(string value)
{
    CheckAsserts(value);
}

【讨论】:

  • 这正是我想要做的,但有两个参数。我将功能作为测试用例,我认为这是我的问题。谢谢
【解决方案3】:

是的,单元测试就像任何其他代码一样。

尤其是NUnit.TestCaseAttribute

【讨论】:

  • 我已经研究过了,但看不到如何设置动态参数。我想将 20 多个手动填充的对象与数据库中的自动填充对象进行比较。使用断言(不是测试用例)创建一个 void 函数并从我的单元测试中调用它非常有效。谢谢
【解决方案4】:

你可以使用TestCase属性:

[TestCase("hostname1parameter")]
[TestCase("hostname2parameter")]
public void Example_TestHostName(string hostname)
{
    ...
}

【讨论】:

    【解决方案5】:

    你需要 TestCase 属性:

    [TestCase("string1",...)
    public void test_UnitTest(string Parameter)
    {
        ...
        Assert.AreEqual(Parameter, result)
    }
    

    请注意,这仅适用于字符串和整数等原始数据类型 - 您不能实例化自己的类并将其用作参数。

    【讨论】:

    • 问题是我正在使用我自己的类对象和 30 多个要比较的属性。
    【解决方案6】:

    您还可以从使用 C# 内省中受益。这允许您获取字段的名称,而无需在代码中指定它们。然后,您可以按名称调用它们。

    System.Attribute[] attrs = System.Attribute.GetCustomAttributes(t);

    这使您可以编写某些类型的测试,这些测试将应用于您尚未编写的类。

    【讨论】:

      猜你喜欢
      • 2011-07-17
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 2020-09-15
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      相关资源
      最近更新 更多