异常消息的单元测试

时间:2009-11-05 09:25:01

标签: unit-testing attributes exception

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

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

如果异常中的消息是BBB,我希望测试通过,但如果是其他任何内容则失败。我查看了ExpectedException属性的第二个参数,但如果Exception类型不同,那只是在测试报告中显示的消息。

我知道我可以尝试{}捕获{}异常然后断言消息IsEqual到消息,但感觉很笨。

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

2 个答案:

答案 0 :(得分:5)

Visual Studio中的内置功能很差。看看NUnit。它的加载更加复杂,具有语法帮助程序,使特定Asserts更容易,可以作为调试或独立运行的一部分运行,具有控制台运行程序以及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
}

不要被推迟:它很复杂,但并不复杂 - 它很容易上班。

答案 1 :(得分:1)

不,不幸的是,对于当前版本的MSTest来说,这是不可能的(这让我很懊恼)。

您可能需要查看xUnit.NET的Assert.Throws以获得更好的替代方案。 Here are some pointers