MSTest ExpectedException失败

Gro*_*fit 13 .net mstest exception

我通常使用Nunit,但在我目前的项目中,我使用的是MSTest.现在我有一个测试,它期望一个异常,但仍然失败,我不知道为什么.

这是我用来复制问题的一个简单示例:

[TestMethod, ExpectedException(typeof(ErrorResponseException))]
        public void should_throw_exception()
        {
            throw new ErrorResponseException();
        }
Run Code Online (Sandbox Code Playgroud)

ErrorResponseException是一个只从Exception继承的类,也就是说,任何人都知道为什么会失败,我希望它能通过.

Tru*_*ill 14

在NUnit中,我会避​​免使用ExpectedException并使用Assert.Throws(Exception Asserts).它为您提供更精细的控制.否则,如果测试方法的任何部分抛出该异常,则测试将通过.

在MSTest中,您可以使用old-school结构获得相同级别的控制:

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
}
Run Code Online (Sandbox Code Playgroud)

有了这个,就不需要ExpectedException属性了.

(这个概念来自David Astels的"测试驱动开发:实用指南"一书.)

  • MSTest不支持这个,它是一个bug.它也是超级跛脚!然而,上面的解决方法将有效 (3认同)

Bra*_*ite 5

无耻的插件,但我编写了一个简单的程序集,它使用Assert.Throws()语法在 MSTest中使对异常和异常消息的断言变得更容易和更具可读性。我写了一篇包含完整细节的博客文章