IntelliJ IDEA与Junit 4.7“! 预计JUnit版本3.8或更高版本:“
当我尝试在IntelliJ IDEA中运行以下testing时,我收到消息:
“!!! 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类。 IDEAtesting运行器加载这些类,并看到它们来自旧的JUnit,而您尝试使用注释testing(这是新的JUnit的function),因此您会从testing运行器中获取错误。
解决方法很简单,打开Project Structure
| Modules
| Dependencies
,并将junit-4.7.jar
移动到类path中的Android 1.6 Platform
之前 。 现在,testing运行者将会很高兴,因为它会加载新的JUnit版本。
我有一个多模块项目(libgdx)这个问题。 一个模块是纯Java并进行testing。 我的解决scheme是在unit testing的运行configuration中将“使用替代JRE”设置为“Java 1.8”。 这确保没有android.jar在类path中,并使用junit 4.x runner。
我的模块是一个Java库模块,所以将JRE改为1.8 java解决了这个问题。
对于Android Studio – 从Android Studio 1.1 Beta 4开始 ,Google已经添加了对Android Gradle插件1.1.0-RC的支持 。 新的插件支持通过Android Studio使用junit 4+进行unit testing。
这仍然是实验性的,有一些手动步骤来设置。
对于正在阅读本文的所有人,AndroidStudio 1.0仍然存在相同的问题。 您无法更改AndroidStudio中的依赖性顺序,IDE将自动重新编写它们。 而且,即使您通过修改.iml文件来设法更改顺序,您也将得到“未find类”。 这是因为AndroidStudio上无法设置testing输出path。
实际上,有做AndroidStudio,Junit和Robolectric一起工作的解决scheme。 看看这个https://github.com/JCAndKSolutions/android-unit-test并使用这个插件以及:; https : //github.com/evant/android-studio-unit-test-plugin
为我完美的作品。
在Android Studio 1.4+中创buildUnit Test
和Android Instrument Test
时,我得到了同样的错误,并开始感到困惑。 为了避免这个错误,请确保您的testing类属于Run/Debug Configurations
下的Android Tests
- 确保你按照指示正确https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html
- 确保
Build Variants
Test Artifact
已设置为Android Instrumentation Tests
- 点击菜单
Run
>Edit Configuration
- 确保您的类/方法名称在
Android Tests
而不是JUnit
- 如果是在
JUnit
只需删除configuration,然后右键单击要testing的文件并再次Run
。 然后它将在Android Tests
部分下创buildconfiguration,并在设备/模拟器上运行。
有两件事我可以想象会发生
- 如果您的IDE尝试启动直接在模拟器上运行的Android Junittesting,则不能使用Junit4。
- 如果你不小心使用了从android jar提供的junit类,他们不能在正常的jvm上运行,因为只有android dalvik vm的真正的编译类。
Android Studio 1.1中也发生了这种情况 – 虽然它应该支持没有插件的unit testing。
在其他机器上(相同的项目,相同版本的AS),我发现在运行unit testing时,IDE不会将android.jar文件添加到类path,而是在我的机器中。
我最好的猜测是,由于我们从Maven转换到Gradle,并从intellij移动到AS,一些设置caching保留在我的机器的某个地方,导致android.jar被添加到类path。
我所做的是清除所有android相关的caching从我的机器(在c:\ users \ USRE_NAME文件夹下):.android。AndroidStudio .gradle .m2
之后,我重新开放了这个项目,testing工作。
仍然试图了解什么地方出了问题,但现在应该这样做。
我在Android Studio 1.5中遇到了这个问题,因为我不知道必须将“构build变体”(主窗口左下angular)中的“Test Artifact”设置从“Android Instrumentation Tests”切换到“Unit Tests ”。 当你这样做的时候,你可以在Project窗口中看到一个ExampleUnitTest.java文件。
我有同样的问题,但另一个原因。 我使用普通的java gradle项目(不是android)在IntelliJ上,但是JDK在Project Structure
被设置为Android SDK(由于某些原因是默认的JDK)。 这真是愚蠢的,但IntelliJ不够好,不能指出我有什么问题,所以我被困住了。
在Android项目中,我有minifyEnabled = true
,我把它改为false
一切工作后。
如果你删除
testOptions { unitTests.returnDefaultValues = true }
从你的build.gradle
它将工作
当我创build自己的junit包时,我得到了同样的错误
要解决这个问题,我已经在我的应用程序gradle文件中添加了这两行,如下所示:
dependencies { ... // Required -- JUnit 4 framework testCompile 'junit:junit:4.12' // Optional -- Mockito framework testCompile 'org.mockito:mockito-core:1.10.19' }