NUnit TestCase预期消息

时间:2016-05-05 07:35:26

标签: c# unit-testing exception nunit testcase

所以我希望能够在TestCase中指定不同的异常消息,但不知道如何完成

这是原作

[Test]
[ExpectedException(typeof(SystemException), ExpectedMessage = "Holiday cannot start or end on a weekend or non-working day")]

public void AddHolidays_StartsInvlaid()
{}

这是TestCase

[TestCase("27/04/2025", "28/05/2025", "FullDay", "FullDay", ExpectedMessage = "Holiday cannot start or end on a weekend or non-working day")]
[ExpectedException(typeof(SystemException), ExpectedMessage)]

public void AddHolidays_Exceptions(string dateFrom, string dateTo, string fromPeriod, string toPeriod)
{}

该方法工作正常,但我只想用NUnit TestCase

指定异常消息

2 个答案:

答案 0 :(得分:5)

如果可以,我建议远离ExpectedException。这被认为是一种不好的做法,因为如果你的测试中的代码抛出了你并不期望它的相同异常,它会导致误报。因此,已从NUnit 3中删除ExpectedException。此外,正如您所发现的,NUnit中的所有数据驱动属性也不完全支持ExpectedException

将代码移至Assert.Throws将解决您的问题。您可以将TestCase中的预期消息作为常规参数传递。我将简化可读性;

[TestCase("27/04/2025", "Holiday cannot start or end on a weekend or non-working day")]
public void AddHolidays_Exceptions(string date, string expectedMessage)
{
    Assert.That(() => ParseDate(date), Throws.ArgumentException.With.Message.EqualTo(expectedMessage));
}

答案 1 :(得分:0)

假设您继续使用NUnit 2.x,只需使用TestCaseAttribute的ExpectedException属性。