5

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

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"

JUnit 4 是必要的,因为 Android 还不支持 JUnit 5。

执行时./gradlew test它可以正常工作,所以我认为这只是 IntelliJ 的问题?

4

3 回答 3

1

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

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

一种解决方法是在 IntelliJ 构建它之后强制编译您的 UnitTest。


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

在此处输入图像描述

并将 Gradle 任务添加到compileDebugUnitTestKotlin

在此处输入图像描述

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

于 2018-07-24T02:56:41.203 回答
1

我有同样的问题,添加app:compileDebugUnitTestKotlin到运行配置对我不起作用。我什至替换Gradle-aware MakeBuild获得相同的配置,但它也没有帮助。

由于您建议使用 Junit 5 执行该课程,因此我还尝试使用该课程进行注释@RunWith(JUnit4::class)。但这也无济于事。

不过有帮助的是降级到3.1.5. 但这不是最好的解决方案,因为在较新的版本中有一些有用的功能。

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

于 2018-07-29T01:00:33.020 回答
0

当我单击“重新加载所有项目”选项时,我遇到了类似的问题

在此处输入图像描述

于 2022-01-06T21:11:51.817 回答