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 in project codebase:
Recommended approach is to use Dedicated konsistTest Source Set or a Isolate Konsist Tests. These approaches allows to easily 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 .

To execute tests run ./gradlew test
command.
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 konsistTest 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 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:
// build.gradle.kts (root)
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 : Remove Konsist tests from the 'check' task if it exists
tasks.matching { it.name == "check" }.configureEach {
setDependsOn(dependsOn.filter { it.toString() != "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 Gradle 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.
Add Gradle konsistTest
Module:
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")
Running Konsist Tests Stored In A Dedicated Gradle Module
Gradle's default behavior assumes that a module's code is up-to-date if the module itself hasn't been modified. This can lead to issues when Konsist tests are placed in a separate module. In such cases, Gradle may skip these tests, believing they're unnecessary.
However, this approach doesn't align well with Konsist's functionality. Konsist analyzes the entire codebase, not just individual modules. As a result, when Gradle skips Konsist tests based on its module-level change detection, it fails to account for potential changes in other modules that Konsist would typically examine.
There are few solutions to this problem.
Solution 1: Module Is Always Out of Date
An alternative solution for this problem is to define konsistTest
module as always being out of date:
// konsistTest/build.gradle.kts
tasks.withType<Test> {
outputs.upToDateWhen { false }
}
Solution 2: Flag --rerun-tasks
To avoid manually passing --rerun-tasks
flag each time a custom konsistCheck
task can be added to the root build config file:
Add to root build.gradle.kts
:
tasks.register("konsistCheck") {
group = "verification"
description = "Runs Konsist static code analysis"
doLast {
val output = ByteArrayOutputStream()
val result = project.exec {
commandLine("./gradlew", "konsistTest:test", "--rerun-tasks")
standardOutput = output
errorOutput = output
isIgnoreExitValue = true
}
println(output.toString())
if (result.exitValue != 0) {
throw GradleException("Konsist tests failed")
}
}
}
After adding konsistCheck
task run ./gradlew konsistCheck
to execute all Konsist tests.
Last updated