IT이야기

주니트와 함께 하는 인텔리제이 아이디어 4.7 "!!!JUnit 버전 3.8 이상 예상:"

cyworld 2022. 5. 8. 22:06
반응형

주니트와 함께 하는 인텔리제이 아이디어 4.7 "!!!JUnit 버전 3.8 이상 예상:"

IntelliJ Idea에서 다음 테스트를 실행하려고 하면 메시지가 표시됨:

"!!! JUnit 버전 3.8 이상 예상:"

이것은 내가 인텔리제이 아이디어 9에서 작업하고 있는 안드로이드 프로젝트라는 점에 유의해야 한다.

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.jar은(는) 하고 있다하려고 할 , 가 이 Idea test runner는 이러한 클래스를 로드하여 그들이 구 JUnit에서 온 것임을 알 수 있으며, 당신은 새로운 JUnit의 특징인 주석 테스트를 사용하려고 할 때, 당신은 테스트 주자에게서 오류를 얻는다.

해결 방법은 간단하다.Project Structure|Modules|Dependencies, 그리고 움직인다.junit-4.7.jar에 일어나도록. Android 1.6 Platform할 때 이제 시험 주자는 새로운 JUnit 버전을 탑재하면서 행복해 할 것이다.

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

내 모듈은 자바 라이브러리 모듈이다. 그래서 JRE를 1.8 자바로 바꾸면 문제가 해결된다.

또는 Android SDK의 복사본 대신 Oracle의 JDK 8을 지정하여 Module Settings > SDK Location > JDK를 통해 전 세계적으로도 할 수 있다.

멀티 모듈 프로젝트(libgdx)에 이런 문제가 있었다.한 모듈은 순수한 자바이며 테스트가 있다.내 해결책은 "대체 JRE 사용"을 "Java 1.8"로 설정하는 것이었다.이렇게 하면 클래스 경로에 Android.jar가 없으며 junit 4.x runner가 사용된다.

둘 다 만들 때 같은 오류가 발생함Unit Test, 그리고Android Instrument TestAndroid Studio 1.4+에서 혼동되기 시작했다.이 오류를 방지하려면 테스트 클래스가 다음에 속하는지 확인하십시오.

  1. https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html의 지침을 제대로 따르십시오.
  2. 보증하다, 확인하다, 확신하다Test ArtifactBuild Variants하기로 되어 있다Android Instrumentation Tests
  3. 클릭메뉴Run>Edit Configuration
  4. 클래스/방법 이름이 안에 있는지 확인하십시오.Android Tests대신에JUnit
  5. 안에 있으면JUnit단순히 구성을 삭제하고 테스트할 파일을 마우스 오른쪽 버튼으로 클릭하기만 하면 된다.Run 그런 , 다시에 . 그런 다음 아래 구성을 만들 것이다.Android Tests장치/에뮬레이터에서 작동한다.

Android Studio - Android Studio 1.1 베타 4부터 Google은 Android Gradle 플러그인 1.1.0-RC에 대한 지원을 추가했다.새로운 플러그인은 Junit 4+를 사용하는 Android Studio를 통한 Unit Testing을 지원한다.

이것은 여전히 실험적이고 이것을 설정하기 위한 몇 가지 수동적인 단계가 있다.

이 게시물을 읽고 있는 모든 사용자를 위해 AndroidStudio 1.0과 동일한 문제를 가지고 있다.AndroidStudio에서 종속성 순서를 변경할 수 없음 IDE에서 자동으로 다시 쓰도록 하십시오.그리고, 당신이 .iml 파일을 수정하여 주문을 변경해도, 당신은 "class not found..."를 받을 것이다.안드로이드스튜디오에서 테스트 출력 경로를 설정할 수 없기 때문이다.

실제로 안드로이드스튜디오, 주니트, 로보렉트릭이 함께 작동하게 하는 해결책이 있다.https://github.com/JCAndKSolutions/android-unit-test을 살펴보고 이 플러그인도 사용하십시오. https://github.com/evant/android-studio-unit-test-plugin

나한테 딱 맞는 말이야

나에게 이 문제는 시험에 대한 구식/파손된 실행 구성에 의해 야기되었다.구성을 지우고 새 구성을 만들면 문제가 해결된다.

이전 테스트 구성 삭제

나만의 junit 패키지를 만들 때 동일한 오류가 발생함

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

이 문제를 해결하기 위해 앱 그래들 파일에 다음 두 줄을 추가했다.

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

나도 같은 메시지를 받았다.

JUnit version 3.8 or later expected

초심자의 실수로src/main 및 src/test에 동일한 패키지 이름과 클래스 이름을 사용했었다(나의 경우 HomeController 클래스).

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

정규화된 학급 이름이 독특해지면서, 문제는 사라진다.

내가 상상할 수 있는 두 가지 일이 있다.

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

플러그 인 없이 장치 테스트를 지원해야 하지만 Android Studio 1.1에서도 이러한 일이 발생했다.

다른 컴퓨터(동일한 프로젝트, 동일한 AS 버전)에서 나는 단위 테스트를 실행할 때 IDE가 내 컴퓨터에서는 classpath에 Android.jar 파일을 추가하지 않는다는 것을 발견했다.

내가 가장 잘 추측한 것은 우리가 메이븐에서 그래들로 변환하고 인텔리지에서 AS로 이동했기 때문에 내 기계 어딘가에 설정 캐시가 남아 있어서 안드로이드.jar가 클래스 경로에 추가되었다.

내가 한 일은 내 컴퓨터(c:\users\아래)에서 모든 안드로이드 관련 캐시를 지운 것이다.USRE_NAME 폴더: .android .AndroidStudio .gradle .m2

그 후 나는 그 프로젝트를 다시 시작했고 테스트는 잘 되었다.

뭐가 잘못됐는지 아직도 이해하려고 하지만 지금으로서는 이게 해결책이 될 거야.

나는 안드로이드 스튜디오 1.5에서 이 문제가 있었는데, "빌드 변형"(메인 창의 왼쪽 하단)에 있는 "테스트 아티팩트" 설정을 "안드로이드 계측 테스트"에서 "유닛 테스트"로 바꿔야 한다는 것을 몰랐기 때문이다.그렇게 하면 Project 창에서 예제UnitTest.java 파일을 볼 수 있다.

나는 같은 문제를 가지고 있었지만 다른 이유 때문에 그랬다.로(IntelliJEATO, JDK는 , 는 안드로이드 SDK로 설정되었다.Project Structure(일부 이유로 기본 JDK이었습니다.)이건 정말 멍청한 짓이야. 하지만 인텔리J가 나한테 뭐가 잘못됐는지 말해줄 만큼 친절하지 않아서 난 그것에 사로잡혔어.

이렇게 해결했어

구성 편집 -> 기본값 -> Android JUnit -> 작업 디렉토리에 다음 항목 추가:

$MODUL_DIR$

IDEA 버전을 2021.2.1로 업데이트할 때 작동했다.

는 안드로이드를 있었다.minifyEnabled = true , 로후 ㅎㅎㅎfalse모든 것이 잘 되었다.

제거하면

testOptions {
    unitTests.returnDefaultValues = true
}

당신의build.gradle그건 작동할 것이다.

Project Structure -> Platform Setting으로 이동하여 SDK를 1.8로 변경하여 문제를 해결했다.

나는 CrazyCoder의 대답을 따랐지만 종속성에는 junit 파일이 보이지 않았다.그래서 나는 http://www.java2s.com/Code/Jar/j/Downloadjunitjar.htm,에서 하나를 다운받은 후 오른쪽에 있는 더하기 버튼을 눌러서 그것을 추가했다.그리고 그것은 성공하였다.

프로젝트 구조/SDK Location에서 "Embedded JDK 사용"을 해제하는 것이 내 경우에 도움이 되었지만, 애초에 그것이 실패한 이유가 무엇인지 정확히 모르겠다.

libs 폴더의 Android.jar를 최신 버전으로 교체하십시오.여기서 다운로드 할 수 있다.

AndroidStudio에서는Open Project Structure -> SDK Location, 너는 볼 수 있다.JDK위치, "내장된 JDK 사용"을 사용하여 사용자 소유JDK적용했다가 "내장된 JDK 사용"으로 다시 변경하면, 아마도 효과가 있을 것이다.

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

마지막으로 @Crazy와 비슷한류의 대답, 인.Project Structure - SDK Location - JDK선발하다Embedded JDK. Android Studio 3.6에는 확인란이 없기 때문이다.

위의 내용은 하나도 나에게 통하지 않았다(Intellij 2019.3.5 빌드 #IU-193.7288.26) 마침내 메이븐 창의 '모든 프로젝트 다시 가져오기' 버튼을 사용하여 작동했다.여기에 이미지 설명을 입력하십시오.

나는 안드로이드 {} 블록에서 bulid.gradle 모듈 파일의 userBrary 'android.test.runner' 라인을 삭제했고 모든 것이 잘 작동했다.

나도 같은 문제에 직면하고 있었는데, build.gradle로 바꾼 후에 그것은 나에게 잘 작동된다.

build.gradle 내부 junit 버전을 다음 버전으로 변경:

    testImplementation 'junit:junit:3.8'

참조URL: https://stackoverflow.com/questions/2422378/intellij-idea-with-junit-4-7-junit-version-3-8-or-later-expected

반응형