我通常使用Nunit,但在当前项目中,我正在使用MSTest。现在,我进行了一个测试,该测试预期会有异常,但仍会失败,并且我不知道为什么。
这是我用来复制问题的简单示例:
[TestMethod, ExpectedException(typeof(ErrorResponseException))]
public void should_throw_exception()
{
throw new ErrorResponseException();
}
ErrorResponseException是一个仅从Exception继承的类,就是这样,任何人都知道为什么这会失败,我希望它能够通过。
最佳答案
在NUnit中,我将避免ExpectedException并改用Assert.Throws(异常声明)。它为您提供更细粒度的控制。否则,如果测试方法的任何部分抛出该异常,则测试将通过。
在MSTest中,您可以使用旧式构造获得相同级别的控制:
try
{
// code that you expect to throw goes here
Assert.Fail("Expected MyException");
}
catch (MyException ex)
{
// optionally assert on the message - this can make tests fragile though
}
这样,就不需要ExpectedException属性。
(该概念来自David Astels的《测试驱动开发:实用指南》一书。)