我通常使用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的《测试驱动开发:实用指南》一书。)

09-26 05:33