0

Visual Studio 유닛 테스트 케이스를 사용하고 있습니다. 테스트 할 메소드에서 인수 예외가 예상되는 단위 테스트 케이스 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);