주니트와 함께 하는 인텔리제이 아이디어 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 Test
Android Studio 1.4+에서 혼동되기 시작했다.이 오류를 방지하려면 테스트 클래스가 다음에 속하는지 확인하십시오.
- https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html의 지침을 제대로 따르십시오.
- 보증하다, 확인하다, 확신하다
Test Artifact
에Build Variants
하기로 되어 있다Android Instrumentation Tests
- 클릭메뉴
Run
>Edit Configuration
- 클래스/방법 이름이 안에 있는지 확인하십시오.
Android Tests
대신에JUnit
- 안에 있으면
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 사용"으로 다시 변경하면, 아마도 효과가 있을 것이다.
내 경우는 변화.JRE
에Run 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'
'IT이야기' 카테고리의 다른 글
Java, "각각" 루프의 현재 인덱스/키를 가져오는 방법 (0) | 2022.05.08 |
---|---|
VueJS - 문자열 내에서 문자열 보간 (0) | 2022.05.08 |
문자열에서 문자 발생 횟수를 계산하는 방법 (0) | 2022.05.08 |
vuejs - 동적 입력 'synamic' (0) | 2022.05.08 |
Java: 인스턴스(Instanceof) 및 제네릭 (0) | 2022.05.08 |