[java] JUnit : 테스트 유틸리티 클래스에서 “실행 가능한 메소드 없음”을 피하는 방법

JUnit3.8에서 JUnit4.4로 전환했습니다. ant를 사용하여 테스트를 실행하고 모든 테스트가 성공적으로 실행되지만 테스트 유틸리티 클래스가 “No runnable methods”오류와 함께 실패합니다. 내가 사용하는 패턴은 테스트 폴더 아래에 * Test *라는 이름의 모든 클래스를 포함하는 것입니다.

주자가 @Test 속성으로 주석이 달린 메서드를 찾을 수 없다는 것을 이해합니다. 그러나 이러한 클래스는 테스트가 아니기 때문에 이러한 주석을 포함하지 않습니다. 놀랍게도 이클립스에서 이러한 테스트를 실행할 때 이러한 클래스에 대해 불평하지 않습니다.

JUnit3.8에서는 이러한 유틸리티 클래스가 TestCase를 확장하지 않았기 때문에 실행자가 실행을 시도하지 않았기 때문에 전혀 문제가되지 않았습니다.

개미 스크립트의 junit 대상에서 이러한 특정 클래스를 제외 할 수 있다는 것을 알고 있습니다. 그러나 추가하는 모든 새 유틸리티 클래스에서 빌드 파일을 변경하고 싶지 않습니다. 나는 또한 클래스의 이름을 바꿀 수 있습니다 (하지만 클래스에 좋은 이름을주는 것은 항상 나의 가장 약한 재능이었습니다 :-))

이 문제에 대한 우아한 해결책이 있습니까?



답변

테스트 클래스를 찾는 데 사용되는 패턴을 제어한다고 가정하면 . *Test대신 일치하도록 변경하는 것이 좋습니다 *Test*. 그 방법 TestHelper은 일치하지 않을 FooTest것입니다.


답변

@Ignore로 util 클래스에 주석을 답니다. 이로 인해 JUnit이 테스트로 실행하지 않습니다.


답변

내 특정 사례에는 다음과 같은 시나리오가 있습니다. 우리의 테스트

public class VenueResourceContainerTest extends BaseTixContainerTest

모두 확장

BaseTixContainerTest

JUnit이 BaseTixContainerTest를 실행하려고했습니다. 불쌍한 BaseTixContainerTest는 단지 컨테이너를 설정하고, 클라이언트를 설정하고, 피자를 주문하고, 긴장을 풀려고했습니다.

앞서 언급했듯이 클래스에 다음과 같이 주석을 달 수 있습니다.

@Ignore

그러나 이로 인해 JUnit은 해당 테스트를 건너 뛴 것으로보고했습니다 (완전히 무시되는 것과 반대).

Tests run: 4, Failures: 0, Errors: 0, Skipped: 1

그런 종류의 짜증이났습니다.

그래서 저는 BaseTixContainerTest 추상을 만들었고, 이제 JUnit은 그것을 정말로 무시합니다.

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0


답변

JUnit이 테스트 기본 클래스를 인스턴스화하는 것을 방지하려면

public abstract class MyTestBaseClass { ... whatever... }

(@Ignore는 일시적으로 무시 된 테스트를 위해 예약 한 무시 된 것으로보고합니다 .)


답변

  1. 이것이 AbstractTest와 같은 기본 테스트 클래스이고 모든 테스트가 이것을 확장하면이 클래스를 추상으로 정의하십시오.
  2. Util 클래스 인 경우 클래스 이름에서 * Test를 제거하는 것이 좋습니다. MyTestUtil 또는 Utils 등입니다.

답변

IDE의 코드 완성을 사용하여 @Test.

예를 들어 이어야 import org.junit.Test하고 이어야 import org.testng.annotations.Test합니다. 후자를 수행하면 “실행 가능한 메서드 없음”오류가 발생합니다.


답변

Ant는 이제 skipNonTests당신이 찾고있는 것을 정확하게 수행하도록 설계된 속성을 제공 합니다. 추상화하거나 주석을 추가하기 위해 기본 클래스를 변경할 필요가 없습니다.