无法在Ktor应用程序中运行启动程序Spek测试
我使用IntellJ版本2017.2.5构建Ktor应用程序。 我也想用Spek来测试应用程序。 我从一个非常简单的文件开始,
import org.jetbrains.spek.api.Spek import org.jetbrains.spek.api.dsl.given import org.jetbrains.spek.api.dsl.it import org.jetbrains.spek.api.dsl.on import kotlin.test.assertEquals class SampleSpec : Spek({ given("some context") { on("executing some action") { it("should pass") { assertEquals(2, 2) } } } })
当我右键点击运行测试,我得到以下错误:
Feb 08, 2018 2:50:32 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable WARNING: TestEngine with ID 'spek' failed to discover tests java.lang.NoClassDefFoundError: org/junit/platform/engine/discovery/ClasspathSelector at org.jetbrains.spek.engine.SpekTestEngine.resolveSpecs(SpekTestEngine.kt:48) at org.jetbrains.spek.engine.SpekTestEngine.discover(SpekTestEngine.kt:36) at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:130) at org.junit.platform.launcher.core.DefaultLauncher.discoverRoot(DefaultLauncher.java:117) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90) at org.jetbrains.spek.tooling.runner.junit.JUnitPlatformSpekRunner.run(JUnitPlatformSpekRunner.kt:107) at org.jetbrains.spek.tooling.MainKt.main(Main.kt:58) Caused by: java.lang.ClassNotFoundException: org.junit.platform.engine.discovery.ClasspathSelector at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
对不起,冗长的build.gradle,但这里是:
group 'MyApp' version '1.0-SNAPSHOT' buildscript { ext.kotlin_version = '1.2.21' ext.ktor_version = '0.9.1' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" //testing classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.0-M4' testCompile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" testCompile ('org.jetbrains.spek:spek-api:1.1.5') { exclude group: 'org.jetbrains.kotlin' } testRuntime ('org.jetbrains.spek:spek-junit-platform-engine:1.1.5') { exclude group: 'org.junit.platform' exclude group: 'org.jetbrains.kotlin' } } } //testing apply plugin: 'org.junit.platform.gradle.plugin' apply plugin: 'java' apply plugin: 'kotlin' junitPlatform { platformVersion '1.0.0-M4' filters { engines { include 'spek' } } } sourceCompatibility = 1.8 compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" } kotlin { experimental { coroutines "enable" } } repositories { mavenCentral() maven { url "https://dl.bintray.com/kotlin/kotlinx" } maven { url "https://dl.bintray.com/kotlin/ktor" } maven { url "https://dl.bintray.com/jetbrains/spek" } } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" compile "io.ktor:ktor-server-netty:$ktor_version" //testing testCompile 'org.jetbrains.kotlin:kotlin-test:1.1.0' testCompile 'org.jetbrains.spek:spek-api:1.1.4' testCompile 'org.jetbrains.spek:spek-junit-platform-engine:1.0.89' testRuntime 'org.jetbrains.spek:spek-junit-platform-engine:1.0.0-M4' }
任何想法在哪里是问题?
您正在使用Spek和Junit平台的不兼容版本。 您应该更新以使用Spek文档建议的版本: http ://spekframework.org/docs/latest/#_gradle
我已经更新了您的示例以使用Spek 1.1.5和Junit Platform 1.0.0
group 'MyApp' version '1.0-SNAPSHOT' buildscript { ext.kotlin_version = '1.2.21' ext.ktor_version = '0.9.1' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.0' } } //testing apply plugin: 'org.junit.platform.gradle.plugin' apply plugin: 'java' apply plugin: 'kotlin' junitPlatform { filters { engines { include 'spek' } } } sourceCompatibility = 1.8 compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" } kotlin { experimental { coroutines "enable" } } repositories { mavenCentral() maven { url "https://dl.bintray.com/kotlin/kotlinx" } maven { url "https://dl.bintray.com/kotlin/ktor" } maven { url "https://dl.bintray.com/jetbrains/spek" } } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" compile "io.ktor:ktor-server-netty:$ktor_version" //testing testCompile 'org.jetbrains.kotlin:kotlin-test:1.1.0' testCompile 'org.jetbrains.spek:spek-api:1.1.5' testRuntime 'org.jetbrains.spek:spek-junit-platform-engine:1.1.5' testRuntime 'org.junit.platform:junit-platform-launcher:1.0.0' }
我还发现包含testRuntime 'org.junit.platform:junit-platform-launcher:1.0.0'
以确保IntelliJ插件使用正确的Junit版本很有用。
- Android studio 2.3:无法初始化类org.jetbrains.kotlin.android.actions.NewKotlinActivityAction
- Intellij Idea kotlin不能自动导入一些运算符函数,例如+
- 使Intellij Idea插件与Kotlin文件一起工作
- 是否可以在Android Studio中将我的Kotlin文件移动到单独的包(源types)中?
- 是否有限制stdlib函数在Kotlin中的可见性?
- Intellij Idea不会编译kotlin,但maven会这样做
- 如何调试Kotlin序列/集合
- 用父类的实例属性初始化子类Kotlin类的快速方法
- 在我创建的模块中找不到文件的IntelliJ报告错误