首页 文章

IntelliJ IDEA与Junit 4.7“!!! JUnit 3.8或更高版本预期:“

提问于
浏览
190

当我尝试在IntelliJ IDEA中运行以下测试时,我收到消息:

“!!! JUnit 3.8或更高版本预期:”

应该注意的是,这是我在IntelliJ IDEA 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

16 回答

  • 1

    如果你删除

    testOptions {
        unitTests.returnDefaultValues = true
    }
    

    从你的 build.gradle 它将工作

  • 1

    转到项目结构 - >平台设置,将SDK更改为1.8解决了我的问题 .

  • 0

    我也遇到了同样的问题,在改成build.gradle后,它对我来说很好 .

    change your junit version inside build.gradle to:

    testImplementation 'junit:junit:3.8'
    
  • 1

    在Android项目中我有 minifyEnabled = true ,在我将其更改为 false 后,一切正常 .

  • 7

    出现此问题是因为Android平台( android.jar )已包含JUnit类 . IDEA测试运行器加载这些类并看到它们来自旧的JUnit,而您尝试使用带注释的测试,这是新JUnit的一个功能,因此您从测试运行器获得错误 .

    解决方法很简单,打开 Project Structure | Modules | Dependencies ,然后向上移动 junit-4.7.jar ,使其在类路径中出现 before Android 1.6 Platform . 现在,测试运行器将在加载新的JUnit版本时感到高兴 .

  • 356

    enter image description here

    我的模块是一个java库模块,所以将JRE更改为1.8 java解决了这个问题 .

    或者,您也可以通过模块设置> SDK位置> JDK全局完成,指定Oracle的JDK 8而不是Android SDK的副本 .

  • 1

    我有一个多模块项目(libgdx)的问题 . 一个模块是纯Java并且有测试 . 我的解决方案是在我的单元测试的运行配置中将“使用替代JRE”设置为“Java 1.8” . 这确保了类路径上没有android.jar,并且使用了junit 4.x runner .

  • 0

    在Android Studio 1.4中创建 Unit TestAndroid Instrument Test 时出现同样的错误,它开始变得混乱 . 为了避免这个错误 make sure your test class is fall under Android Tests on Run/Debug Configurations

    • 确保按照说明正确使用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 中,只需删除配置并右键单击要测试的文件,然后再次 Run . 然后它将在 Android Tests 部分下创建配置,并在设备/模拟器上运行 .

  • 6

    对于Android Studio - 从Android Studio 1.1 Beta 4开始,Google已添加对Android Gradle plugin 1.1.0-RC的支持 . 新插件使用junit 4支持通过Android Studio进行单元测试 .

    这仍然是实验性的,有一些manual steps来设置它 .

  • 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

    适合我 .

  • 1

    有两件事我能想象会发生

    • 如果您的IDE尝试启动直接在模拟器上运行的Android Junit测试,则无法使用Junit4 .

    • 如果你不小心使用了android jar提供的junit类,它们无法在普通的jvm上运行,因为android dalvik vm只有真正的编译类 .

  • 30

    在Android Studio 1.1中也发生了这种情况 - 虽然它应该支持没有插件的单元测试 .

    在其他机器上(同一个项目,相同版本的AS),我发现在运行单元测试时,IDE不会将android.jar文件添加到类路径中,而在我的机器中它会这样做 .

    我最好的猜测是,由于我们从Maven到Gradle的转换以及从intellij转移到AS,我的机器中某些设置缓存仍然存在,导致android.jar被添加到类路径中 .

    我做的是从我的机器清除所有与Android相关的缓存(在c:\ users \ USRE_NAME文件夹下):. anroid .AndroidStudio .gradle .m2

    之后我重新打开了项目,测试工作正常 .

    仍然试图了解出了什么问题,但这应该是现在的伎俩 .

  • 1

    我在Android Studio 1.5中遇到过这个问题,因为我不知道我必须将“Build Variants”(主窗口的左下角)中的“Test Artifact”设置从“Android Instrumentation Tests”切换到“Unit Testing” ” . 执行此操作时,可以在“项目”窗口中看到ExampleUnitTest.java文件 .

  • 5

    我有同样的问题,但另一个原因 . 我在IntelliJ上使用常规的java gradle项目(不是android)但JDK设置为 Project Structure 中的Android SDK(由于某些原因是默认的JDK) . 这真是愚蠢但是IntelliJ并没有错,所以我被困在了 .

  • 0

    当我创建自己的junit包时,我遇到了同样的错误

    enter image description here

    为了解决这个问题,我在我的应用程序gradle文件中添加了这两行,因为它解释了here

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

    这就是我解决它的方式:

    编辑配置 - >默认值 - > Android JUnit - >将以下内容添加到工作目录:

    $ MODULE_DIR $

相关问题