Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ExpectedException attribute is not working

I have a really odd situation using Visual Studio unit testing framework. A test decorated as [TestMethod, ExpectedException(typeof(InvalidOperationException))] fails with System.InvalidOperationException.

If I remove all code from the test (to make sure it doesn't throw anything at all) - it passes. It is as if ExpectedException is not even there...

If I start an empty project with a dummy test that does nothing but throwing InvalidOperationException it totally works as expected.

Verified that neither ExpectedExceptionAttribute nor InvalidOperationException are overridden. Not sure what else to try here...


EDIT: Fixed the problem by removing reference to the Microsoft.VisualStudio.QualityTools.UnitTestFramework v10.1 and adding v10.0. Not sure why would this matter or why other attributes worked just fine.

like image 408
Ilia G Avatar asked Apr 11 '13 21:04

Ilia G


1 Answers

Personally I do not use the ExpectedExeption attribute because it does not allow you to specify exactly which statement is expected to throw the exception. For instance, there could be some problem in your test setup code that throws an InvalidOperationExeption which was not exected in your test and suddenly your test passes. Furthermore it does not allow you to inspect the Exeception, like Asserting it has the correct message.

I use the following approach

[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");
}
like image 129
Frank Bakker Avatar answered Sep 28 '22 01:09

Frank Bakker