我正在运行以下测试设置。
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 - 它只是说一个或多个子测试有错误。
答案 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");
}