Android 尝试在Intellij 2018.2.RC中执行JUnit 4测试时出现NoClassDefFoundError

Android 尝试在Intellij 2018.2.RC中执行JUnit 4测试时出现NoClassDefFoundError,android,gradle,intellij-idea,kotlin,kotlintest,Android,Gradle,Intellij Idea,Kotlin,Kotlintest,尝试在Android中使用KotlinTest执行非常简单的Hello World测试时: class ExampleUnitTest : FreeSpec() { init { "Test" { 2 + 2 shouldBe 4 } } } 在IntelliJ中尝试执行此操作时,单击绿色图标,我会出现以下错误: Exception in thread "main" java.lang.NoClassDefFoundError: org/junit/pl

尝试在Android中使用KotlinTest执行非常简单的Hello World测试时:

class ExampleUnitTest : FreeSpec() {

init {
    "Test" {
        2 + 2 shouldBe 4
    }
   }
}
在IntelliJ中尝试执行此操作时,单击绿色图标,我会出现以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/junit/platform/launcher/TestExecutionListener
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at com.intellij.junit5.JUnit5IdeaTestRunner.createListeners(JUnit5IdeaTestRunner.java:39)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:45)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.launcher.TestExecutionListener
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 16 more

Process finished with exit code 1
我正在使用此依赖项:

testImplementation "io.kotlintest:kotlintest-runner-junit4:3.1.8"
JUnit4是必需的,因为Android还不支持JUnit5


执行
/gradlew测试时
工作正常
,因此我认为这只是IntelliJ的问题?

我不确定是什么原因造成的,但经过数小时无用的研究, 我找到了解决这个问题的方法

这似乎是IntelliJ IDEA 2018.2.RC中的一个bug,导致它无论如何都使用JUnit 5执行代码。看起来它这样做是因为在类路径中找不到任何其他TestExecutor

解决这个问题的一个办法是在IntelliJ构建UnitTest之后强制编译它


为此,请编辑您的测试配置:

并将Gradle任务添加到编译的BugUnitTestKotlin:


在此之后,您的测试应该再次变为绿色。

我也有同样的问题,添加
app:compiledBugUnitTestKotlin
来运行配置对我来说不起作用。我甚至用
Build
替换了
Gradle-aware-Make
,以获得相同的配置,但也没有任何帮助

我还尝试用
@RunWith(JUnit4::class)
注释该类,因为您建议它是用JUnit5执行的。但这也没有帮助

但有帮助的是降级到
3.1.5
。但这不是最好的解决方案,因为新版本中有一些有用的函数


不过,很高兴知道它是从命令行运行的。这样,我就可以使用最新版本,使用
app:test的Gradle运行配置运行测试,并在浏览器中查看结果。不完美,但…

我确实找到了一个解决办法,将其降级到3.1.5,但非常不幸的是,执行CompiledBugUnitTestKotlin对您不起作用:XYU还可以在Terminal->
/gradlew test
中执行,并在browserIDEA 2019.2中查看它生成的测试结果(这是一个index.html文件),问题仍然存在。非常感谢3.1.5解决方案。你向JetBrains提交报告了吗?