是否有一种简单的(属性驱动的)方法可以在异常消息上使以下测试失败。
[TestMethod()]
[ExpectedException(typeof(ArgumentException))]
public void ExceptionTestTest()
{
throw new ArgumentException("BBB");
}
如果异常中的消息是BBB,我希望测试通过,但如果是其他任何内容则失败。我查看了ExpectedException属性的第二个参数,但如果Exception类型不同,那只是在测试报告中显示的消息。
我知道我可以尝试{}捕获{}异常然后断言消息IsEqual到消息,但感觉很笨。
PS。我正在使用Visual Studio 2008(pro)的内置单元测试
答案 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