2013-04-11 21 views
7

私はVisual Studioのユニットテストフレームワークを使用して本当に奇妙な状況に陥っています。 [TestMethod, ExpectedException(typeof(InvalidOperationException))]として試験された試験はSystem.InvalidOperationExceptionで失敗する。ExpectedException属性が機能していません

テストからすべてのコードを削除した場合(何もスローしないことを確認するため)、パスします。それはあたかもExpectedExceptionがそこにいないかのようです...

InvalidOperationExceptionを投げて何もしないダミーテストで空のプロジェクトを開始すると、期待どおりに動作します。

ExpectedExceptionAttributeInvalidOperationExceptionのどちらも上書きされないことを確認しました。 ...ここにしようとして他に何かわからない


EDIT:Microsoft.VisualStudio.QualityTools.UnitTestFramework 10.1への参照を削除し、バージョン10.0を追加することによって、問題を修正しました。 なぜこの問題か、他の属性がうまく機能する理由がわかりません。

+0

を使用し、その仕事をする(すなわち、それがスローにもかかわらず、合格します例外?) –

+0

@MattSmithいいえ、テストは失敗します。 –

+0

興味深い問題、素敵な発見。 – Eogcloud

答えて

3

個人的に私はExpectedExeption属性を使用しません。なぜなら、例外を投げる予定のステートメントを正確に指定することができないからです。たとえば、テストで設定されていないInvalidOperationExeptionがスローされ、突然テストに合格するという問題があります。さらに、Exceptationを検査することを許可しません.Asesertingに正しいメッセージがあります。予想通り、あなたがテストからすべてのコードを削除し、ちょうどInvalidOperationExceptionがをスローするように行を追加するには、問題のあるプロジェクトでいる場合

は、私は次のようなアプローチ

[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"); 
} 
関連する問題