NUnit顺序/组合问题

时间:2011-08-19 09:13:03

标签: c# nunit

我正在编写一些单元测试,并希望使用Sequential标记,我已经找到了用于对此类测试进行定界的语法。

[Test, Sequential]
    public void TestCalculations(
    [Values(10000, 15000, 20000, 25000, 50000)] int salary)
    {


    }

在执行带有多个输入的顺序/组合等测试时,如何处理断言?

祝福

2 个答案:

答案 0 :(得分:6)

我自己没有使用过这些属性,但我希望编写实际的测试方法体,就像你为单个值编写它一样。基本上,您一次只能看到一个值,所以只需编写代码来测试该值。

鉴于the documentation,我认为Sequential对你的例子没有意义,因为你只有一个参数。当你有多个参数时,这是有意义的,并且基本上说一个参数的第一个值应该与另一个参数的第一个值配对,然后是每个等的第二个值,而不是每个可能的对被执行。您可以使用它来提供输入和预期输出,例如:

[Test, Sequential]
public void TestDivisionBy2(
    [Values(10, 25, 40)] int input,
    [Values(5, 12, 20)] int expectedOutput)
{
    Assert.AreEqual(expectedOutput, input / 2);
}

答案 1 :(得分:4)

在某些情况下,TestCase属性可能很有用,它提供了内置功能Result

[TestCase(12,3, Result=4)]
[TestCase(12,2, Result=6)]
[TestCase(12,4, Result=3)]
public int DivideTest(int n, int d)
{
  return( n / d );
}

如果您不希望任何特定的结果值,并且只是想确保测试在不同的输入值下正常工作 - 您也可以这样做:

[TestCase(120000, -1)]
[TestCase(Int32.MinValue, Int32.MaxValue)]
[TestCase(-1, 23333)]
public void ShouldHandleWrongRangeValues(int n, int d)
{
     Assert.DoesNotThrow(() => { var someIntermediateValue = n * d; });
}