如何确定哪个参数集导致测试失败?

时间:2014-06-18 10:16:36

标签: c# nunit

我正在运行以下测试设置。

private static object[] Test_Source =
{
  new object[] {"0", 1, 2},
  new object[] {"3", 4, 5}
};

[Test, TestCaseSource("Test_Source")]
[Category("Unit")]
public void Method_test(String expected, int in1, int in2)
{
  String actual = MethodCall(in1, in2);

  Assert.AreEqual(expected, actual, "Poof");
}

其中只有一个失败。我如何报告哪一个?现在,我甚至不会看到文本 Poof - 它只是说一个或多个子测试有错误

2 个答案:

答案 0 :(得分:4)

Assert.AreEqual(expected, actual, 
  string.Format("Poof on parameters:{0}, {1}",in1,in2));

答案 1 :(得分:1)

NUnit将通过对.ToString()返回的对象调用Test_Source来报告失败。如果您将类型更改为可以覆盖.ToString()的内容,则可以获得更好的错误消息。考虑像这样的东西而不是普通的对象:

public class TestObject
{
     public TestObject(string expected, int in1, int in2)
     {
         Expected = expected;
         In1 = in1;
         In2 = in2;
     }

     public string Expected { get; set; }
     public int In1 { get; set; }
     public int In2 { get; set; }

     public override string ToString()
     {
         return string.Format("In1: {0}, In2: {1}", In1, In2);
     }
}

您可以将测试签名更改为以下内容:

[Test, TestCaseSource("Test_Source")]
[Category("Unit")]
public void Method_test(TestObject testObject)
{
    String actual = MethodCall(testObject.In1, testObject.In2);

    Assert.AreEqual(testObject.Expected, actual, "Poof");
}