自定义消息和默认消息

时间:2013-03-05 17:05:12

标签: c# unit-testing vs-unit-testing-framework

有没有办法为Assert.AreEqual(object, object, string)指定一条将自定义消息与默认消息相结合的消息?

我有以下代码:

foreach (var testCase in testCases)
{
    Assert.AreEqual(testCase.Value, myObj.myMethod(testCase.Key), combinedMessage);
}

除了来自VS单元测试框架的示例消息之外,我还想指定测试用例密钥:

Assert.AreEqual failed. Expected:<True>. Actual:<False>.

也许像Failed on the following test case: AB

2 个答案:

答案 0 :(得分:4)

重载会自动为您完成此操作。作为测试,我制作了这个测试方法,看看输出是什么:

    [TestMethod]
    public void Test()
    {
        Assert.AreEqual(true, false, "Failed on the following test case: AB");
    }

错误消息输出为:Assert.AreEqual failed. Expected:<True>. Actual:<False>. Failed on the following test case: AB

消息参数已经附加/组合到默认消息。

对于您的情况,如果您只想获得测试密钥,则测试可能如下所示:

foreach (var testCase in testCases)
{
    Assert.AreEqual(testCase.Value, myObj.myMethod(testCase.Key), 
        "Failed on the following test case: " + testCase.Key.ToString());
}

如果测试用例都应该有自己的自定义消息,那么将自定义错误消息移动到testCase类就有意义了。作为创建每个对象的一部分,您可以指定这三个属性:

testCase.Value = true;
testCase.Key = "AB";
testCase.FailureMessage = "Failed on the following test case: AB";

这种类型的结构允许为testCase的每个实例附加指定的消息。这样做可以使单元测试看起来像这样:

foreach (var testCase in testCases)
{
    Assert.AreEqual(testCase.Value, myObj.myMethod(testCase.Key), 
        testCase.FailureMessage));
}

,示例中的输出显示为:Assert.AreEqual failed. Expected:<True>. Actual:<False>. Failed on the following test case: AB

答案 1 :(得分:1)

你能不能直接发消息?

foreach (var testCase in testCases)
{
    string message = string.Format("{0}: {1}", defaultMessage, testCase.Key);
    Assert.AreEqual(testCase.Value, myObj.myMethod(testCase.Key), message );
}