Isolate Konsist Tests

Aim for better test separation.

Typically, it's advisable to consolidate all Konsist tests in a unified location. This approach is preferred because these tests are often designed to validate the structure of the entire project's codebase. There are three potential options for storing Konsist tests:

AndroidSpringKMPPure Kotlin

Recommended approach is to use konsist-test source set or dedicated module. This approach allows to isolate Konsist tests from other types of tests e.g. separate unit tests from Konsist tests.

Existing Test Source Set

The Konsist library can be added to the project by adding the dependency on the existing test source set .

The downside of this approach is that various types of tests are mixed in test source set e.g. unit tests and Konsist tests.

Dedicated konsist-test Source Set

This section demonstrates how to add the konsistTest test source directory inside the app module. This configuration is mostly useful for Spring and Kotlin projects.

This page describes the test located in the app module with the build config file located in app a folder. If the project does not contain any module then configuration should be applied in the root build config file.

This test directory will have a kotlin folder containing Kotlin code.

Use the Gradle built-in JVM Test Suite Plugin to define the konsistTest source set. Add a testing block to the project configuration:

// app/build.gradle.kts

plugins {
    `jvm-test-suite`
}

testing {
    suites {
        register("konsistTest", JvmTestSuite::class) {
            dependencies {
                // Add 'main' source set dependency
                implementation(project())
                
                // Add Konsist dependency
                implementation("com.lemonappdev:konsist:0.13.0") 
            }
        }
    }
}

// Optional block to run Konsist tests together with the Gradle 'check' task
tasks.named("check") { 
    dependsOn(testing.suites.named("konsistTest"))
}

Create app/src/konsistTest/kotlin folder and reload the project. The IDE will present a new konsistTest source set in the app module.

The konsistTest test source folder works exactly like the build-in test source folder, so Kosist tests can be defined and executed in a similar way:

./gradlew app:konsistTest

Dedicated Module

This section demonstrates how to add the konsistTest module to the project. This configuration is primarily helpful for Android projects and Kotlin Multiplatform (KMP) projects, however, this approach will also work with Spring and pure Kotlin projects.

The Android Gradle Plugin is used to build Android apps. The Android Gradle Plugin is not compatible with the JVM Test Suite Plugin and it does not allow adding new source sets. To fully isolate tests a new module is required.

The Kotlin Multiplatform project contains modules with code for different platforms. To decouple Konsist tests from a single platform dedicated module containing Konsist test should be added.

Add konsistTest Module:

Create konsistTest/src/test/kotlin directory in the project root:

Add module include inside settings.gradle.kts file:

// settings.gradle.kts
include(":konsistTest")

Add konsistTest Module Build Script

Add konsistTest/build.gradle.kts file.

The content of the file will differ depending on the project type (Android, Spring, KMP) and the selected testing framework (JUnit4, JUnit5, KoTest).

Copy content from the file from one of the starter-projects e.g. copy from starter-projects/konsist-starter-spring-gradle-groovy-kotest/build.gradle.kts

Refresh/Sync the Gradle Project in IDE.

Running Konsist Tests

To execute tests in konsistTest module run:

./gradlew konsistTest:test --rerun-tasks

The --rerun-tasks Gradle flag is required when Konsist tests are placed in a distinct module. When the module is unchanged Gradle assumes the tests are up-to-date, so these tests are skipped. This can lead to misleading test outcomes, as Gradle isn't aware that these tests are actually evaluating code in other modules.

To execute all unit tests besides tests in the konsistTest module run:

./gradlew test -x konsistTest:test

Last updated