我正在与 Gradle 一起做一个包含单元测试的 Kotlin 项目。我想添加一些集成测试(或功能测试,从来不了解两者之间的区别(,但我希望能够独立运行它们。理想情况下,测试的源位于不同的文件夹中。
我正在使用 Gradle 4.5,我的 build.gradle 文件看起来像这样:
buildscript {
ext.kotlin_version = '1.2.21'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'kotlin'
apply plugin: 'application'
mainClassName = 'xyz.bobdudan.myproject.AppKt'
repositories {
maven { url "http://maven.stardog.com" }
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
testCompile 'io.kotlintest:kotlintest:2.0.7'
}
我已经尝试了这里描述的java方法,但它不起作用:该任务还运行单元测试,但找不到它们,并且根本不执行集成测试。
我能做什么?
编辑:
以下是gradle clean integTest
@lance-java解决方案的结果:
:clean
:compileIntegTestKotlin
:compileIntegTestJava NO-SOURCE
:processIntegTestResources NO-SOURCE
:integTestClasses UP-TO-DATE
:integTest NO-SOURCE
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
See https://docs.gradle.org/4.5/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed
所以什么都不执行(我确保测试应该失败(
注意:我不是 kotlin 开发人员,所以会用时髦的方式编写。
您可以添加另一个SourceSet
它将自动为SourceSet
添加JavaCompile任务,并向模型添加一些配置实例(例如integTestCompile,integTestCompileOnly,integTestRuntime等(
sourceSets {
integTest {
java.srcDir 'src/integTest/java'
resources.srcDir 'src/integTest/resources'
}
}
configurations {
integTestCompile.extendsFrom compile
}
然后,您可以添加另一个Test
任务
task integTest(type: Test) {
testClassesDir = sourceSets.integTest.output.classesDir
classpath = sourceSets.integTest.runtimeClasspath
}
您可能希望将integTest
任务连接到正常DAG
,或者您可能将其关闭并显式调用它
check.dependsOn integTest
长话短说,你必须:
- 创建单独的源集,
- 为每个测试源创建测试任务,
- 设置它,
- 定义在构建/检查期间执行这些任务的顺序
你很好去。
这是对另一个问题的回答指南,即如何使用JUnit5
和Kotlin Spek
测试框架为项目执行此操作。