0

Visual Studio Unit Test Casesを使用しています。 テスト中のメソッドMethodUnderTestから引数例外が予想されるユニットテストケースを記述しました。テストケースの他の部分(セットアップ部分)が予想される例外ArgumentExceptionをスローした場合、テストケースが失敗するように強制したいとします。セットアップが正しく、instance.MethodUnderTest();コード行がArgumentExceptionを投げる場合にのみ、それは合格するはずです。テスト中のメソッドが予期された例外をスローしたことを確認します。テストケースの他の部分は設定しません。

私はtry catchを使用して達成することができますが、これを達成するためのより良いアプローチがあることを知りたいと思います。

[ExpectedException(typeof(ArgumentException))] 
public void TestCaseMethod() 
{   
    // Set up 
    Mock<ITestClass> testM = new Mock<ITestClass>(); 
    AnimalClass instance = new AnimalClass(testM.Object); 

    // call the method under test 
    instance.MethodUnderTest(); 
} 

答えて

0

私は方法で構築任意のを知っていませんが、場合

private void AssertException<T>(Action method) 
    where T : Exception 
{ 
    try 
    { 
     method(); 
     Assert.Fail(); 
    } 
    catch (T e) 
    { 
     Assert.IsTrue(true); 
    } 
} 

はその後、

[TestMethod] 
public void TestCaseMethod() 
{   
    // Set up 
    Mock<ITestClass> testM = new Mock<ITestClass>(); 
    AnimalClass instance = new AnimalClass(testM.Object); 

    // call the method under test 
    AssertException<ArgumentException>(instance.MethodUnderTest) 
} 

で呼び出したり、アサート例外で方法を包むことができ、あなたのメソッドはパラメータを取り込むか、値を返します。

AssertException<MyException>(() => instance.ParameterisedFunction(a, b)); 
0

NUnitのような高度なユニットテストフレームワークを使用する場合。あなたは次のようなことをすることができます:

// Act 
var result = Assert.Throws<Exception>(() => instance.MethodUnderTest)); 

// Assert 
Assert.IsInstanceOf<ArgumentException>(result); 
関連する問題