2014-01-13 2 views
1

우리는 JUnit을 사용하여 통합 테스트를 수행하고 있으며 외부 테스트 시스템에 의존하는 시스템 통합 테스트 (반드시 자사 회사에서 관리하지는 않음)를 사용합니다.테스트를 실행하기 전에 외부 시스템을 사용할 수 있는지 확인하는 가장 좋은 장소는 무엇입니까?

테스트 케이스를 실행하기 전에 시스템을 사용할 수 있는지 확인하는 코드를 어디에 둘 것인지 궁금합니다. 따라서 네트워크 또는 기타 문제가 있는지 테스트 자체가 아닌지 확인할 수 있습니다.

JUnit을 사용하면 JUnit-Rules에서 테스트의 일부분을 설정할 수 있습니다. 규칙 내에서 외부 시스템과 통신하는 서비스를 설정하고 규칙 내에서 외부 시스템에 대한 일부 기본 검사 ("ping")를 수행하는 것이 좋습니다. 또는 상태를 저장하고 테스트 내에 JUnit assum (rule.isAvailable)을 사용하여 테스트가 실행되지 않도록 할 수 있습니까?

또는이 인증 코드를 맞춤 JUnit 러너에 넣는 것이 현명합니까?

아니면 다른 방법이 있습니까? (간단히 몇 가지 유틸리티를 만드십시오)

목표는 테스트가 실패하므로 몇 가지 조건이 충족되지 않으면 테스트를 건너 뛰는 것입니다. 나는 이것이 나쁜 예외 처리를 가리킨다는 것을 알고 있지만, 나는 완전히 바꿀 수없는 많은 레거시 코드가있다.

기사를 직접 찾으려고했지만 검색 용어 ("테스트", "외부 시스템"등)가 약간 감사 할 것 같습니다.

감사합니다.

+1

규칙 접근 방식이 좋습니다. –

답변

0

here과 같이 org.junit.Assume.*을 사용하는 것을 고려하십시오. 가정이 실패하면 기본적으로 테스트가 무시됩니다. 당신은 가정이 실패했을 때 다른 것을하기 위해 커스텀 러너를 쓸 수 있습니다.

하지만 중요한 것은 외부 서비스의 가용성과 같은 가정이 실패 할 때 테스트가 실패하지 않는다는 것입니다.

+0

감사합니다! 함께 몇 가지 관련 주제를 찾은 가정 : http://stackoverflow.com/questions/19358444/junit-how-to-make-conditional-tests 및 http://stackoverflow.com/questions/1689242/conditionally- ignoring-tests-in-junit-4 – wemu

+0

도와 줘서 기쁘다. 프로젝트에 행운을 빌어 요! – Vidya

0

ping이 클래스의 모든 단일 테스트에 적용되면 ping 호출을 @Before 메서드에 넣습니다. @ 전에 모든 단일 테스트 메소드 (즉, @JUnit - 주석 메소드)가 실행되기 전에 실행됩니다.

ping이 클래스의 모든 테스트에 적용되지 않으면 해당 메소드에서 ping을 명시 적으로 수행해야합니다.

관련 문제