[java] Junit 4.7이 포함 된 IntelliJ IDEA“!!! JUnit 버전 3.8 이상이 예상됩니다.”

IntelliJ IDEA 에서 다음 테스트를 실행하려고 하면 메시지가 나타납니다.

“!!! JUnit 버전 3.8 이상이 필요합니다.”

이것은 IntelliJ IDEA 9에서 작업중 인 Android 프로젝트입니다.

public class GameScoreUtilTest {
    @Test
    public void testCalculateResults() throws Exception {
        final Game game = new Game();

        final Player player1 = new Player();
        {
            final PlayedHole playedHole = new PlayedHole();
            playedHole.setScore(1);
            game.getHoleScoreMap().put(player1, playedHole);
        }
        {
            final PlayedHole playedHole = new PlayedHole();
            playedHole.setScore(3);
            game.getHoleScoreMap().put(player1, playedHole);
        }
        final GameResults gameResults = GameScoreUtil.calculateResults(game);

        assertEquals(4, gameResults.getScore());
    }
}

전체 스택 추적은 다음과 같습니다.

!!! JUnit version 3.8 or later expected:

java.lang.RuntimeException: Stub!
    at junit.runner.BaseTestRunner.<init>(BaseTestRunner.java:5)
    at junit.textui.TestRunner.<init>(TestRunner.java:54)
    at junit.textui.TestRunner.<init>(TestRunner.java:48)
    at junit.textui.TestRunner.<init>(TestRunner.java:41)
    at com.intellij.rt.execution.junit.JUnitStarter.junitVersionChecks(JUnitStarter.java:152)
    at com.intellij.rt.execution.junit.JUnitStarter.canWorkWithJUnitVersion(JUnitStarter.java:136)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)

Process finished with exit code -3



답변

이 문제는 Android 플랫폼 ( android.jar)에 이미 JUnit 클래스가 포함되어 있기 때문에 발생합니다 . IDEA 테스트 러너는 이러한 클래스를로드하고 이전 JUnit에서 가져온 클래스임을 확인하면서 새 JUnit의 기능인 주석이 달린 테스트를 사용하려고 시도하므로 테스트 러너에서 오류가 발생합니다.

해결책은 간단합니다. Project Structure| Modules| 클래스 경로에서 앞에 오도록 위로 Dependencies이동하십시오 . 이제 테스트 러너는 새 JUnit 버전을로드하므로 만족할 것입니다.junit-4.7.jar Android 1.6 Platform


답변

여기에 이미지 설명을 입력하십시오

내 모듈은 Java 라이브러리 모듈이므로 JRE를 1.8 java로 변경하면 문제가 해결되었습니다.

또는 Android SDK 사본 대신 Oracle의 JDK 8을 지정하여 모듈 설정> SDK 위치> JDK를 통해 전역 적으로 수행 할 수도 있습니다.


답변

다중 모듈 프로젝트 (libgdx) 에서이 문제가 발생했습니다. 하나의 모듈은 순수 Java이며 테스트가 있습니다. 내 솔루션은 단위 테스트 실행 구성에서 “대체 JRE 사용”을 “Java 1.8″로 설정하는 것이 었습니다. 이렇게하면 클래스 경로에 android.jar이없고 junit 4.x 러너가 사용됩니다.


답변

나는 모두를 만들 때 같은 오류가 발생했습니다 Unit TestAndroid Instrument Test안드로이드 스튜디오 1.4과는 혼동하기 시작. 이 오류 방지하려면 반드시 테스트 클래스에 해당되는 메이크업을 Android TestsRun/Debug Configurations

  1. https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html 의 지침을 올바르게 따르십시오.
  2. 확인 Test Artifact에서이 Build Variants설정되어Android Instrumentation Tests
  3. 메뉴 Run>를 클릭하십시오Edit Configuration
  4. 클래스 / 메서드 이름이 Android Tests아닌 내부에 있는지 확인하십시오JUnit
  5. 이 글은 경우 JUnit단순히 테스트하고 원하는 파일에 대한 설정 및 마우스 오른쪽 버튼으로 클릭 삭제 Run다시합니다. 그런 다음 Android Tests섹션 아래에 구성을 만들고 장치 / 에뮬레이터에서 실행합니다.

답변

Android Studio 1.1 Beta 4 부터 Android Studio를 위해 Google은 Android Gradle 플러그인 1.1.0-RC에 대한 지원을 추가했습니다 . 새 플러그인은 junit 4 이상을 사용하는 Android Studio를 통한 단위 테스트를 지원합니다.

이것은 아직 실험 단계 이며 이를 설정하기위한 몇 가지 수동 단계 가 있습니다.


답변

이 게시물을 읽고 여전히 AndroidStudio 1.0과 동일한 문제가있는 모든 사람에게 적합합니다. AndroidStudio에서는 종속성 순서를 변경할 수 없으며 IDE에서 자동으로 다시 작성합니다. 그리고 .iml 파일을 수정하여 순서를 변경하더라도 “클래스를 찾을 수 없습니다 …”가 표시됩니다. 테스트 출력 경로를 AndroidStudio에서 설정할 수 없기 때문입니다.

실제로 AndroidStudio, Junit 및 Robolectric을 함께 작동시키는 솔루션이 있습니다. 이 https://github.com/JCAndKSolutions/android-unit-test 를 보고이 플러그인도 사용하십시오 : https://github.com/evant/android-studio-unit-test-plugin

나를 위해 완벽하게 작동합니다.


답변

내 junit 패키지를 만들 때 같은 오류가 발생했습니다.

여기에 이미지 설명을 입력하십시오

이 문제를 해결하기 위해 여기 설명 된대로 앱 gradle 파일 에이 두 줄을 추가했습니다 .

dependencies {
    ...
    // Required -- JUnit 4 framework
    testCompile 'junit:junit:4.12'
    // Optional -- Mockito framework
    testCompile 'org.mockito:mockito-core:1.10.19'
}