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

时间:2018-01-31 13:16:37

标签: unit-testing gradle kotlin integration-testing

我正在与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'
}

我已尝试使用method described here for 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

所以什么都没有执行(我确保测试应该失败)

2 个答案:

答案 0 :(得分:1)

注意:我不是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  

答案 1 :(得分:0)

要说长篇短文,你必须:

  1. 创建单独的源集,
  2. 为每个测试源创建testTask,
  3. 设置,
  4. 定义在构建/检查期间应执行这些任务的顺序
  5. 你很高兴。

    以下是an answer to another question中有关如何使用JUnit5Kotlin Spek测试框架为项目执行此操作的指南