Konsist is a library that guards the consistency of Kotlin projects by promoting the standardization of the Kotlin codebase. It enforces coding conventions and project architecture. Konsist tests are written in Kotlin and can be easily integrated with popular testing frameworks such as JUnit4, JUnit5.
// Gradle Kotlin:
testImplementation("com.lemonappdev:konsist:0.12.1")
// Gradle Groovy:
testImplementation "com.lemonappdev:konsist:0.12.1"
// Maven:
<dependency>
<groupId>com.lemonappdev</groupId>
<artifactId>konsist</artifactId>
<version>0.12.1</version>
<scope>test</scope>
</dependency>
Check the Konsist documentation to learn more about Konsist and take a look at getting started guide.
Konsist API reflects the structure of Kotlin code. Konsist guards are written in form of unit tests.
@Test
fun `classes with 'UseCase' suffix should reside in 'usecase' package`() {
Konsist.scopeFromProject()
.classes()
.withNameEndingWith("UseCase")
.assert { it.resideInPackage("..usecase..") }
}
@Test
fun `classes extending 'ViewModel' should have 'ViewModel' suffix`() {
Konsist.scopeFromProject()
.classes()
.withAllParentsOf(ViewModel::class)
.assert { it.name.endsWith("ViewModel") }
}
@Test
fun `interfaces with 'Repository' annotation should have 'Repository' suffix`() {
Konsist
.scopeFromProject()
.interfaces()
.withAllAnnotationsOf(Repository::class)
.assert { it.hasNameEndingWith("Repository") }
}
@Test
fun `clean architecture layers have correct dependencies`() {
Konsist
.scopeFromProduction()
.assertArchitecture {
// Define layers
val domain = Layer("Domain", "com.myapp.domain..")
val presentation = Layer("Presentation", "com.myapp.presentation..")
val data = Layer("Data", "com.myapp.data..")
// Define architecture assertions
domain.dependsOnNothing()
presentation.dependsOn(domain)
data.dependsOn(domain)
}
}
Check out our snippet page for a feast of examples!
- Introducing Konsist: A Cutting-Edge Kotlin Linter
- Refactoring Multi-Module Kotlin Project With Konsist
- ArchUnit vs. Konsist. Why Did We Need Another Kotlin Linter?
Use #konsist channel at kotlinlang Slack Workspace (preferred) or start GitHub discussion.
Please be sure to review Konsist contributing guidelines to learn how to support the project.
Konsist is distributed under the terms of the Apache License (Version 2.0). See LICENSE.md for details.