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


206

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

최신 패치 인 Intellij 9
benstpierre


솔직히 IntelliJ에서 Android 플러그인을 사용하고 총알을 깨고 최신 Android Studio를 사용했습니다. 모든 괜찮
커비

테스트 클래스 이름에 "Test"가없는 다른 누군가가 여기에 온 경우; "테스트"형제를 추가해야합니다. "GameEngine"클래스의 이름을 지정하면 같은 오류가 발생하므로 "GameEngineTest"로 지정하여 해결할 수 있습니다. 건배!
recepinanc

답변:


364

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

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


9
사람들 에게이 사실을 알리기 위해 이후 버전의 Android에서는 여전히 문제입니다.
Chris.Jenkins

테스트 의존성 후에 안드로이드 제공 의존성을 배치함으로써 maven에서 문제를 해결했습니다
avianey

18
나는 Gradle을 안드로이드 프로젝트가 그 robolectric 여기에 설명 된대로 용도 : peterfriese.de/android-testing-with-robolectric 내가 클래스 패스에서 1 일부터 떨어져 안드로이드 플랫폼을 이동할 때, 나는 다음과 같은 예외가 얻을 :Class not found: "com.example.intellijgradletest.MainActivityTest"
히스 테두리

7
의존성 순서를 변경하기위한 IDEA 14.0.3에서는 화살표를 사용해야합니다. 드래그 앤 드롭이 작동하지 않습니다.
david.perez

4
android studio에서 depenedency 파일이 자동 생성됩니다. 따라서 위 / 아래로 이동할 수 없습니다. 이 문제를 해결할 다른 방법이 있습니까?
iMDroid

35

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

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

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


이것은 실제로 작동하며 문제의 맥락에서 말이됩니다.
Agent Knopf

필자의 경우 Junit의 JRE를 기본값으로 변경해야했습니다.
Rafael

다른 방법 : Windows 에서 또는 Windows 에서 jdk.table.xml 을 편집하십시오 . 노드 찾기 및 설정 에를 . 또한 노드가 두 파일 경로 URL 모두에 포함되어 있는지 확인하십시오 . "Android-SDK"를 폴더 이름으로 조정하십시오. ~/Library/Preferences/AndroidStudioX.X/options/jdk.table.xmlC:\Users\Name\.AndroidStudioX.X\config\options\jdk.table.xml<name value="Android API 28 Platform" /><annotationsPath><root url="jar://$USER_HOME$/Android-SDK/platforms/android-28/data/annotations.zip!/" type="simple" /><classPath>platforms/android-28/...
Mr-IDE

이것은 나를 위해 작동합니다! Default (Android API 28)에서 1.8 (Java)로 변경하면 작동합니다!
aiueoH

8

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


실제로 1.8을 사용할 필요는 없습니다. Android SDK와 함께 제공되지 않는 1.7을 선택하면 충분합니다.
kingston

8

나는 모두를 만들 때 같은 오류가 발생했습니다 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섹션 아래에 구성을 만들고 장치 / 에뮬레이터에서 실행합니다.

4
이것은 나를 위해 일했습니다 => JUnit에있는 경우 구성을 삭제하고 테스트하려는 파일을 마우스 오른쪽 버튼으로 클릭하고 다시 실행하십시오. 그런 다음 Android 테스트 섹션에서 구성을 만들고 장치 / 에뮬레이터에서 실행합니다.
Devendra Vaja

나를 위해 일했습니다. test폴더 에서 폴더로 옮긴 후에 동일한 테스트를 실행했습니다 androidTest. Android Studio는이 작업을 수행 한 후 실행 구성을 업데이트하지 않았습니다
Daniil

5

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

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


그것은 작동하지만 Android Studio는 테스트를 위해 자동 생성 구성에 여전히 문제가 있으므로 테스트 패키지를 다시 선택하여 실행중인 구성을 수정해야 할 때마다. 그렇지 않으면 테스트 실행 중 NullPointerException이 발생합니다.
Alfishe

4

이 게시물을 읽고 여전히 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

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


2

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

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

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

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

1

내가 일어날 것으로 상상할 수있는 두 가지가 있습니다

  • IDE가 에뮬레이터에서 직접 실행되는 Android Junit 테스트를 시작하려고하면 Junit4를 사용할 수 없습니다.
  • 실수로 android jar에서 제공된 junit 클래스를 사용한 경우 android dalvik vm에 대한 실제 컴파일 된 클래스 만 있기 때문에 일반 jvm에서 실행할 수 없습니다.

1

이것은 플러그인없이 단위 테스트를 지원해야하지만 Android Studio 1.1에서도 나에게 일어났습니다.

다른 컴퓨터 (동일한 프로젝트, 동일한 버전의 AS)에서 단위 테스트를 실행할 때 IDE가 android.jar 파일을 클래스 경로에 추가하지 않지만 내 컴퓨터에서는 그렇게합니다.

가장 좋은 추측은 Maven에서 Gradle 로의 변환과 intellij에서 AS 로의 이동으로 인해 android.jar가 클래스 경로에 추가되는 내 컴퓨터 어딘가에 일부 설정 캐시가 남아 있다는 것입니다.

내가 한 것은 내 컴퓨터 (c : \ users \ USRE_NAME 폴더 아래)에서 모든 Android 관련 캐시를 지우는 것입니다. .android .AndroidStudio .gradle .m2

그 후 프로젝트를 다시 열었고 테스트가 작동했습니다.

아직도 무엇이 잘못되었는지 이해하려고 노력하고 있지만, 지금 당장 트릭을 수행해야합니다.


1

Android Studio 1.5에서이 문제가 발생했습니다. "빌드 변형"(메인 창의 왼쪽 하단)에서 "테스트 아티팩트"설정을 "Android Instrumentation Tests"에서 "Unit Tests로 전환해야한다는 것을 몰랐기 때문입니다. ". 그렇게하면 프로젝트 창에서 ExampleUnitTest.java 파일을 볼 수 있습니다.


1

나는 같은 문제가 있었지만 다른 이유가 있습니다. 나는 안드로이드가 아닌 일반 자바 gradle 프로젝트로 IntelliJ에 있었지만 JDK는 안드로이드 SDK로 설정되었습니다 Project Structure(일부 이유로 기본 JDK였습니다). 이것은 정말로 멍청하지만 IntelliJ는 나에게 무엇이 잘못되었는지 표시하기에 충분하지 않아서 그것에 붙어 있습니다.


1

이것이 내가 해결 한 방법입니다.

구성 편집-> 기본값-> Android JUnit-> 다음을 작업 디렉토리에 추가하십시오.

$ MODULE_DIR $


1

나 에게이 문제는 테스트에 대한 구식 / 깨진 실행 구성으로 인해 발생했습니다. 구성을 삭제 한 다음 새 구성을 작성하면 문제가 해결되었습니다.

이전 테스트 구성 삭제


0

안드로이드 프로젝트 minifyEnabled = true에서 false모든 것을 작동 시킨 후에 변경 했습니다.


0

제거하면

testOptions {
    unitTests.returnDefaultValues = true
}

당신의 build.gradle그것 에서 작동합니다


0

프로젝트 구조-> 플랫폼 설정으로 이동하여 SDK를 1.8로 변경하여 문제를 해결하십시오.


0

나는 또한 build.gradle로 변경 한 후에도 같은 문제에 직면했다.

build.gradle 내의 junit 버전을 다음으로 변경하십시오.

    testImplementation 'junit:junit:3.8'


0

프로젝트 구조 / SDK 위치에서 "임베디드 JDK 사용"을 끄는 것이 내 경우에 도움이되었지만 처음에 실패한 이유가 무엇인지 정확히 알지 못합니다.


0

libs 폴더 의 android.jar 을 최신 폴더로 바꿉니다 . 여기 에서 다운로드 할 수 있습니다


0

안드로이드 스튜디오에서 Open Project Structure -> SDK Location, 당신이 볼 수있는 JDK위치 변경 사용 "사용이 JDK를 포함" 소유에 JDK적용하기 위해, 다음에 다시 변경 "을 사용하여 내장 된 JDK" 그것은 어쩌면 일이다,


0

내 경우에는, 변화 JRERun Configurations용량은 문제를 해결하지만, 제가 테스트 기능 옆에있는 실행 버튼을 클릭하면 JRE옵션은 기본값으로 재설정됩니다.

마지막으로 @CrazyLiu의 답변과 유사한에서 Project Structure - SDK Location - JDK를 선택하십시오 Embedded JDK. Android Studio 3.6에는 확인란이 없으므로


0

같은 메시지를 받았습니다

JUnit version 3.8 or later expected

간단한 초보자의 실수로. 클래스 (내 경우에는 HomeController 클래스)에 대해 src / main 및 src / test에서 동일한 패키지 이름과 클래스 이름을 사용했습니다.

my-test-project
  +--pom.xml
  +--src
    +--main
      +--com
        +--example
          +--Application.java
          +--controller
            +--HomeController.java
    +--test
      +--com
        +--example
          +--ApplicationTest.java
          +--controller
            +--HomeController.java  <---- same package and class name: not good!

이를 통해 src / main HomeController 클래스와 src / test HomeController 클래스는 동일한 전체 경로를 갖습니다.

com.example.controller.HomeController.class

결과 : HomeController 클래스에 종속 된 테스트가 실패했습니다.

패키지 이름 및 / 또는 클래스 이름을 변경하면 문제가 해결되었습니다. 다음 예제는 패키지 이름과 클래스 이름이 모두 변경된 경우입니다.

my-test-project
  +--pom.xml
  +--src
    +--main
      +--com
        +--example
          +--Application.java
          +--controller
            +--HomeController.java
    +--test
      +--com
        +--example
          +--test                       <---- added (optional)
            +--ApplicationTest.java
            +--controller
              +--HomeControllerTest.java    <---- changed

이제 정규화 된 클래스 이름이 다릅니다. src / main HomeController 클래스 이름은 다음과 같습니다.

com.example.controller.HomeController.class

src / test HomeHontrollerTest 클래스 이름은 다음과 같습니다.

com.example.test.controller.HomeControllerTest.class

정규화 된 클래스 이름이 고유하면 문제가 사라집니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.