테스트 방법에서 try catch를 사용해야합니까? 내 테스터 구성 요소에서도 예외가

단위 테스트를하고 있습니다.

하나의 기능을 테스트하려고합니다.

테스트 컴포넌트에서 호출합니다. 그러나 원격 기능이 예외를 처리 할 수 ​​없다면 내 테스터 구성 요소에서도 예외가 발생합니다.

테스터 구성 요소에서 예외가 발생하는 것에 대해 걱정해야합니까?

감사.

편집하다:

추신:

오류를 던지는 것은 좋지만 다른 기능에 대해서만 최종 옵션이 될 때까지 최종 옵션이 아닙니다!

세상에 나는 프로그래밍 견적을 썼다!!



답변

짧은 대답 : NO.

단위 테스트에서 예외를 포착하지 마십시오. 예외가 발생하는 오류 및 상황을 찾기위한 단위 테스트입니다.

단위 테스트 프레임 워크는 예외를 깔끔하게 처리해야합니다. (모든 경우) 대부분의 xUnit의 프레임 워크가 할 수있는 구조가 기대 당신이 테스트중인 시스템에서 특정 예외 조건을 유도하고 예상 예외가 발생하면 테스트 통과를 가지고 있지만 그렇지 않은 경우 실패 할 때 사용하는 특정 예외를.


답변

(mcottle의 답변과 달리) 긴 대답 : 아니요 … 대부분의 경우

테스트에서 특정 예외가 발생할 것으로 예상 할 때 해당 테스트의 모든 행이 특정 예외를 발생시키는시기를 알게됩니다.

테스트중인 메소드가 예외를 던진다는 것을 아는 것과는 다릅니다.

테스트에 객체 또는 컨텍스트 설정이 포함 된 경우 (프레임 워크의 버전이 아닌 테스트 내에서 SetUp) 실제로 테스트하려는 단일 행을 시도 / 캐치에서 랩퍼로 래핑하는 것이 좋습니다.

예를 들어

public static class AssertHelper {
    public delegate void Thunk();

    public static void DoesNotThrow<T>(Thunk thunk, string message = "")
        where T: Exception {
        try {
            thunk.Invoke();
        } catch(T) {
            Assert.Fail(message);
        }
    }
}

그리고

[TestMethod]
public void assertHelperInAction() {
    // Random setup stuff here that's too annoying to put in my SetUp
    // method.
    AssertHelper.DoesNotThrow<IllegalArgumentException>(() =>
        {/* My random method under test */})
}

이 테스트가 실패하면 테스트중인 메소드가 임의의 설정 항목이 아닌 예외를 던졌습니다.

(임의의 설정 작업을 피하려고 노력해야합니다. 때로는 테스트에 설정 코드를 추가하는 것이 더 쉽습니다.)


답변

일반적으로 예외는 제외해야하며 테스트 프레임 워크는 필요한 모든 정보가 포함 된 멋진 보고서를 제공합니다.


그러나 TDD 방법론에서는 다음 단계를 수행해야합니다.

  1. 테스트 작성
  2. 실패를보고 오류를 이해할 수있게하십시오.
  3. 코드 수정
  4. 코드와 테스트 리팩토링

예외를 내릴 때 오류가 분명하면 괜찮습니다. 그러나 때로는 예외가 모호하거나 잘못 인도되기도합니다. 어떻게 코드에 넣을 수 있습니까 (나중에 잊어 버렸을 때 또는 문제를 파악하는 데 큰 시간을 허비 할 팀원을 위해)? 따라서 제 정책은 ” 실패를 분명히해야하는 경우 예외를 잡아야합니다 “입니다.