新的NUnit版本3.x不再支持ExpectedExceptionAttribute
。而是Assert.Throws<MyException>()
。可能是一个更好的逻辑概念。但我没有找到任何替代旧货的MatchType
- 有没有?可以使用NUnit 2.x中的许多参数抛出MyException
我可以比较包含特定文本片段的异常消息,以了解使用了哪个参数(当然,我不会有数十个异常类而不是正常的异常类。如何使用NUnit 3.x处理这个问题?我无法找到提示。
使用NUnit 2.x,我会执行以下操作:
[Test]
[ExpectedException(ExpectedException=typeof(MyException), ExpectedMessage="NON_EXISTENT_KEY", MatchType=MessageMatch.Contains)]
public void DeletePatient_PatientExists_Succeeds()
{
Person p = new Person("P12345", "Testmann^Theo", new DateTime(1960, 11, 5), Gender.Male);
MyDatabase.Insert(p);
MyDatabase.Delete(p.Key);
// Attemp to select from a database with a non-existent key.
// MyDatabase throws an exception of type MyException with "NON_EXISTENT_KEY" within the message string,
// so that I can distinguish it from cases where MyException is thrown with different message strings.
Person p1 = MyDatabase.Select(p.Key);
}
我怎样才能与NUnt 3.x做类似的事情?
请考虑我的意思:NUnit提供的方法不足以识别抛出异常的参数,因此这是一个不同的问题。
答案 0 :(得分:1)
var ex = Assert.Throws<MyException>(()=> MyDatabase.Select(p.Key));
StringAssert.Contains("NON_EXISTENT_KEY", ex.Message);
答案 1 :(得分:-1)
从外观上看,提供此功能的可能性确实存在(甚至比前面提到的更清晰),尽管不是在NUnit 3本身,而是在FluentAssertions
(http://www.fluentassertions.com/)。在那里,你可以做像
Action act = () => MyDatabase.Select(p.Key);
act.ShouldThrow<MyException>().Where(ex => ex.Message.Contains("NON_EXISTENT_KEY"));
出于我所有的实际目的,这解决了这个问题。