代码之家  ›  专栏  ›  技术社区  ›  My Other Me

异常消息的单元测试

  •  2
  • My Other Me  · 技术社区  · 15 年前

    是否有一种简单的(属性驱动的)方法使以下测试在异常消息上失败?

    [TestMethod()]
    [ExpectedException(typeof(ArgumentException))]
    public void ExceptionTestTest()
    {
        throw new ArgumentException("BBB");
    }
    

    如果异常中的消息是bbb,我希望测试通过,但是如果有其他消息,则测试失败。我查看了expectedException属性的第二个参数,但如果异常类型不同,那么这只是一条要在测试报告中显示的消息。

    我知道我可以尝试捕获异常,然后断言消息与消息相等,但感觉很笨拙。

    我正在使用Visual Studio 2008(Pro)的内置单元测试

    2 回复  |  直到 15 年前
        1
  •  5
  •   serialhobbyist    15 年前

    Visual Studio中的内置功能很差。看一看 NUnit .它的加载更加复杂,有语法帮助程序,可以更容易地进行特定的断言,可以作为调试的一部分运行,或者独立运行,有一个控制台运行程序以及UI等等。我已经用了很多年了-这是生意。异常消息选项让人感受到它是多么复杂:

    public enum MessageMatch
    {
        /// Expect an exact match
        Exact,  
        /// Expect a message containing the parameter string
        Contains,
        /// Match the regular expression provided as a parameter
        Regex,
        /// Expect a message starting with the parameter string
        StartsWith
    }
    

    别被耽搁了:这很复杂,但并不复杂——工作很容易。

        2
  •  1
  •   Mark Seemann    15 年前

    不,不幸的是,这在当前版本的MSTEST中是不可能实现的(这让我很懊恼)。

    你可能想看看Xunit.net的assert.throws,寻找更好的选择的灵感。 Here are some pointers .