developer tip

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

optionbox 2020. 7. 24. 20:39
반응형

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


JUnit3.8에서 JUnit4.4로 전환했습니다. ant를 사용하여 테스트를 실행했는데 모든 테스트가 성공적으로 실행되었지만 테스트 유틸리티 클래스가 "실행 가능한 메소드 없음"오류와 함께 실패합니다. 내가 사용하는 패턴은 테스트 폴더 아래에 이름이 * Test * 인 모든 클래스를 포함시키는 것입니다.

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

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

ant 스크립트의 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, 예를 들면. 후자를 수행하면 "실행 가능한 메소드 없음"오류가 발생합니다.


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


이 클래스에 빈 테스트 메소드를 추가하는 것은 어떻습니까?

public void avoidAnnoyingErrorMessageWhenRunningTestsInAnt() {
    assertTrue(true); // do nothing;
}

테스트 클래스에서 import org.junit.jupiter.api.Test; 삭제하고 import org.junit.Test;를 작성하십시오. 이 경우 그것은 나에게도 효과가 있었다.


또한 가장 간단한 코드 조각 (@Test, @Before 등 사용)을 실행하는 것과 비슷한 문제 ( "실행할 수있는 방법 없음")에 직면하여 솔루션을 찾을 수 없었습니다. Junit4 및 Eclipse SDK 버전 4.1.2를 사용하고있었습니다. 최신 Eclipse SDK 4.2.2를 사용하여 문제를 해결했습니다. 나는 이것이 다소 비슷한 문제로 어려움을 겪고있는 사람들에게 도움이되기를 바랍니다.

참고 URL : https://stackoverflow.com/questions/672466/junit-how-to-avoid-no-runnable-methods-in-test-utils-classes

반응형