Konsist 是一个代码检查工具,通过强制实施一致的代码结构和统一的架构来保证 Kotlin 项目的一致性。Konsist 的检查规则以单元测试的形式编写(JUnit / Kotest)。
依赖项
// Gradle Kotlin:
testImplementation("com.lemonappdev:konsist:0.15.1")
// Gradle Groovy:
testImplementation "com.lemonappdev:konsist:0.15.1"
// Maven:
<dependency>
<groupId>com.lemonappdev</groupId>
<artifactId>konsist</artifactId>
<version>0.15.1</version>
<scope>test</scope>
</dependency>
查看 Konsist 文档 了解更多关于 Konsist 的信息,并查看入门指南。
示例
Konsist API 反映了 Kotlin 代码的结构。所有声明,如类、函数和属性,都可以通过 Konsist API 进行查询和验证。请看以下几个例子。
通用 Kotlin 检查
@Test
fun `以'UseCase'为后缀的类应该位于'usecase'包中`() {
Konsist.scopeFromProject()
.classes()
.withNameEndingWith("UseCase")
.assertTrue { it.resideInPackage("..usecase..") }
}
Android 特定检查
@Test
fun `继承'ViewModel'的类应该以'ViewModel'为后缀`() {
Konsist.scopeFromProject()
.classes()
.withAllParentsOf(ViewModel::class)
.assertTrue { it.name.endsWith("ViewModel") }
}
Spring 特定检查
@Test
fun `带有'Repository'注解的接口应该以'Repository'为后缀`() {
Konsist
.scopeFromProject()
.interfaces()
.withAllAnnotationsOf(Repository::class)
.assertTrue { it.hasNameEndingWith("Repository") }
}
架构层检查
@Test
fun `清洁架构层具有正确的依赖关系`() {
Konsist
.scopeFromProduction()
.assertArchitecture {
// 定义层
val domain = Layer("Domain", "com.myapp.domain..")
val presentation = Layer("Presentation", "com.myapp.presentation..")
val data = Layer("Data", "com.myapp.data..")
// 定义架构断言
domain.dependsOnNothing()
presentation.dependsOn(domain)
data.dependsOn(domain)
}
}
查看我们的代码片段页面,获取更多示例!
文章
阅读 Konsist 文章,获取有关维护项目一致性的最佳实践和策略的宝贵见解。
Star 历史
社区与支持
在 kotlinlang Slack 工作空间的 #konsist 频道留言(首选)或开启 GitHub 讨论。
贡献
请务必查看 Konsist 的贡献指南,了解如何支持该项目。
许可证
Konsist 根据 Apache License(版本 2.0)的条款分发。有关详细信息,请参阅 LICENSE.md。