2011-11-23 4 views
5

저는 VS 2010에서 Microsoft Test로 많은 단위 테스트를 작성하고 있습니다. 각 테스트 클래스에는 다음과 같은 많은 테스트 방법이 있습니다.시험을 피하는 가장 좋은 방법은 무엇입니까 ... 마침내 ... 내 단위 테스트에서 ...?

[TestMethod] 
public void This_is_a_Test() 
{ 
    try 
    { 
    // do some test here 
    // assert 
    } 
    catch (Exception ex) 
    { 
    // test failed, log error message in my log file and make the test fail 
    } 
    finally 
    { 
    // do some cleanup with different parameters 
    } 
} 

각 테스트 방법이 이렇게 생겼을 때 나는 추락했습니다. 그러나 지금까지는 테스트 코드를 더 깨끗하게 만들 수있는 좋은 해결책, 특히 finally 블록의 정리 코드를 찾지 못했습니다. 여기 누군가가 나에게 이것에 대한 조언을 줄 수 있을까?

미리 감사드립니다.

답변

6

당신이 정말로 [*] 아래 그림처럼 당신이 도우미 방법이 표준 템플릿을 마무리하고 사용할 수 있습니다 처리하고 테스트 실행하는 동안 예외를 기록하려면 .

Assert.Throws<ExceptionType>(() => { ... code block... }); 
Assert.DoesNotThrow(() => { ... code block... }); 

그리고 정리 특별 할 :

그러나 예외 경우

이것은 잘못된 접근이며 NUnit과 예외를 테스트하는 등의 도우미를 제공 인스턴스에 대한 테스트 프레임 워크가 제공하는 기능을 사용해야합니다 테스트 케이스의 일부입니다 메서드 프레임 워크는 [TestCleanup][TestInitialize]과 같이 테스트 프레임 워크에서 자동으로 테스트 초기화 및 정리 작업을 수행합니다.

[*] 아이디어는 대리자 검체를 감싸고 실제로 try/catch 블록 래핑 테스트 실행 수행 헬퍼로 전달하는 것이다

// helper 
public void ExecuteTest(Action test) 
{ 
    try 
    { 
    test.Invoke(); 
    } 
    catch (Exception ex) 
    { 
    // test failed, log error message in my log file and make the test fail 
    } 
    finally 
    { 
    // do some cleanup with different parameters 
    } 
} 

[TestMethod] 
public void This_is_a_Test_1() 
{ 
    Action test =() => 
    { 
     // test case logic 
     // asserts 
    }; 

    this.ExecuteTest(test); 
} 
+0

해답을 제공해 주셔서 감사 드리며 해결책을 알려 드리겠습니다. –

1

모두 삭제 시착에 급격을 마지막으로 (특히 catch는 불필요하지만 유해 할뿐만 아니라 테스트 할 때 예외를 잡아서는 안됩니다.) tearDown 메소드에서 정리를 수행해야합니다 (그러나 MS Test에서 수행됩니다. [TearDownMethod] 또는 [ FixtureTearDown] 또는 이와 비슷한 것).

+0

각 테스트 메소드마다 다른 정리가 있기 때문에 결국에는 정리를 수행해야합니다. –

+0

그 경우, 그렇습니다. 청소가 필요한 경우. 테스트는 분리되어 실행됩니다. 그리고 일반적인 설치와 일반 청소를 수행하는 조명기로 조명을 분리하면이 패턴이 거의 필요 없습니다. 나는 나의 경험에서 너에게 말한다. 당신이 깨끗하게해야 할 것이 무엇인지 예를 들어 줄 수 있습니까? (예외가 잡히도록 설계되지 않은 것은 손으로 기록된다는 것을 이해하시기 바랍니다.하지만 러너를 테스트하여 오류를 잡아낼 수 있도록 설계되었으므로 오류 또는 오류인지 확인하기 위해 'catch'부분 단위 테스트가 의도 된 방식에 정말로 반대했다). –

+0

catch 블록에서 검토를 위해 정의한 중앙 위치에 오류 메시지를 기록하려고합니다. 마지막으로 블록에서 동적으로 생성 된 일부 데이터를 데이터베이스에서 정리해야합니다. 몇 가지 테스트 방법에는 공통적 인 데이터가 거의 없습니다. –

관련 문제