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 TestAndroid Instrument Test时,我得到了同样的错误,并开始感到困惑。 为了避免这个错误,请确保您的testing类属于Run/Debug Configurations下的Android Tests

  1. 确保你按照指示正确https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html
  2. 确保Build Variants Test Artifact已设置为Android Instrumentation Tests
  3. 点击菜单Run > Edit Configuration
  4. 确保您的类/方法名称在Android Tests而不是JUnit
  5. 如果是在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' }