Ker*_*ker 5 android intellij-idea gradle kotlin kotlintest
当尝试在 Android 中执行一个非常简单的 Hello World 测试时,使用 KotlinTest:
class ExampleUnitTest : FreeSpec() {
init {
"Test" {
2 + 2 shouldBe 4
}
}
}
Run Code Online (Sandbox Code Playgroud)
尝试在 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
Run Code Online (Sandbox Code Playgroud)
我正在使用此依赖项:
testImplementation "io.kotlintest:kotlintest-runner-junit4:3.1.8"
Run Code Online (Sandbox Code Playgroud)
JUnit 4 是必需的,因为 Android 尚不支持 JUnit 5。
执行时./gradlew test它工作正常,所以我认为这只是 IntelliJ 的问题?
我不确定是什么导致了这个问题,但经过几个小时无用的研究,我找到了解决这个问题的解决方法。
这似乎是 IntelliJ IDEA 2018.2.RC 中的一个错误,导致它无论如何都使用 JUnit 5 执行代码。看起来它这样做是因为它在类路径中找不到任何其他 TestExecutor。
解决此问题的方法是强制在 IntelliJ 构建 UnitTest 后对其进行编译。
为此,编辑您的测试配置:
并将 Gradle 任务添加到compileDebugUnitTestKotlin:
之后,您的测试应该再次变为绿色。