3

정적 메서드에 대한 서명이 포함 된 인터페이스를 만든 경우 해당 정적 메서드에 종속 된 클래스를 테스트하는 방법이 있습니다.콘크리트 테스트 래퍼 클래스

하지만 인터페이스를 구현하고 해당 정적 메서드를 래핑하는 구체적인 래퍼 클래스를 테스트하려면 어떻게해야합니까?

콘크리트 래퍼 클래스를 테스트하지 않았습니까?

정적 메서드를 래핑하는 것처럼 보이는 것이 문제를 다른 곳으로 옮겼습니다. 나는 여전히 테스트하기 어려운 클래스, 래퍼 클래스를 가지고있다.

답변

3

올바른 방향을 찾고 있지만 문제를 다른 곳으로 옮기고 있지 않습니다. 코드베이스와 다른 테스트에서 누출되는 것을 방지하기 위해 격리되어 있습니다. 포장 된 행동에 대해 잘못된 가정을하거나 그러한 가정을 간과 한 적이없는 경우에만이 문제를 볼 수 있습니다. 몇 가지 테스트가 필요하지만 다양한 어려움이 있습니다. 이러한 가정을 테스트하기로 얼마나 멀리 선택 하느냐에 따라 필요한 트레이드 오프가 될 것입니다.

일부 시나리오의 경우 래퍼를 테스트 할 수 있지만 제어 할 수있는 물리적 종속성이 필요합니다. 예를 들어 파일을 수정하는 정적 메서드를 사용하려면 파일 시스템을 설정하는 데 시간이 걸리거나 웹 서버에서 파일을 다운로드하는 도우미 클래스가 필요합니다. 필자는 이러한 테스트를 "단위 테스트"대신 "통합 테스트"라고 생각하고 있습니다. 이러한 테스트는 해당 표준 테스트를 실행하는 데 시간이 더 오래 걸릴 수 있으므로이를 제거하고 빠른 단위 테스트보다 자주 실행하지 않는 것이 좋습니다.

다른 시나리오의 경우 상당한 노력없이 테스트를 작성할 수 없습니다. 예를 들어, 별도의 창에 대화 상자를 표시하는 논리를 래핑했을 수 있습니다. 코드에서이 논리를 테스트하는 것은 많은 작업이 될 수 있지만 응용 프로그램을 실행하고 작동하는지 확인하는 것으로 충분할 수 있습니다. 당신은 코드 커버리지에 대한 히트를 치르지 만 나에게 이것은 받아 들일 수있는 트레이드 오프이다.

중요한 문제는 래핑 된 동작의 가정을 이해하는 것입니다. 예를 들어 웹 요청이 잘못되었거나 네트워크 연결이 끊어진 경우 원격 서버에서 어떤 유형의 예외가 발생합니까? 이러한 가정을 올바르게 포착하지 않으면 해당 오류가 코드의 다른 영역으로 바뀝니다.