使用Visual Studio单元测试框架我有一个非常奇怪的情况。装饰为[TestMethod, ExpectedException(typeof(InvalidOperationException))]
的测试失败 System.InvalidOperationException
。
如果我从测试中删除所有代码(以确保它根本不抛出任何东西) - 它会通过。就好像ExpectedException
甚至不存在......
如果我开始一个虚拟测试的空项目,除了抛出InvalidOperationException
之外什么都不做,它完全按预期工作。
已确认ExpectedExceptionAttribute
和InvalidOperationException
均未被覆盖。不知道还有什么可以尝试...
编辑:通过删除对Microsoft.VisualStudio.QualityTools.UnitTestFramework
v10.1的引用并添加v10.0来解决此问题。
不确定为什么会这么重要或为什么其他属性工作正常。
答案 0 :(得分:3)
我个人不使用ExpectedExeption属性,因为它不允许您准确指定预期会抛出异常的语句。例如,您的测试设置代码中可能存在一些问题,即抛出InvalidOperationExeption,而该测试未在您的测试中执行,并且突然您的测试通过。此外,它不允许您检查Exeception,例如断言它有正确的消息。
我使用以下方法
[TestMethod]
public void Test()
{
//Arrange
var sut = new ClassToTest();
sut.MethodThatShouldNotThrow();
//Act
try
{
sut.MethodToTestThatShuldThrow();
}
catch(InvalidOperationException ioex)
{
//Assert, here you could do additional Asserts on the Exception's properties
return;
}
Assert.Fail("Expected InvalidOperationException was not thrown");
}