如何使用Gradle和Kotlin创建单独的测试?

我正在使用包含unit testing的Gradle开发Kotlin项目。 我想添加一些集成测试(或function测试,从来没有理解两者之间的差异),但我希望能够独立运行它们。 理想情况下,测试的来源在不同的文件夹中。

我正在使用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,但它不起作用:任务也运行unit testing,但他们不能被发现,集成测试根本不执行。

我能做什么 ?

编辑:

下面是使用@ lance-java解决方案的gradle clean integTest的结果:

 :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 dev,所以会写在groovy。

您可以添加另一个SourceSet ,它将自动为SourceSet添加一个JavaCompile任务,还会为模型添加一些Configuration实例(例如,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