Vas*_*Vas 3 unit-testing gradle kotlin
我有一个多模块项目设置。在测试的时候,我发现我一直在重新定义每个模块中的一些模拟。所以我希望在最深的模块中定义我的模拟并在外部模块中重用它
我做了什么:
val mock = Mock(val id: String = "blah")testImplementation project(:deepestModule)assertThat(mock.id).isEqualTo("blah")没有编译错误,但是当我运行外部测试时,构建失败,对模拟的引用未解析。
这有什么窍门吗?
Bjø*_*ter 11
一个项目中的测试类不会暴露给其他项目,甚至不会暴露给其他项目的测试。这是设计使然。项目中的单元测试通常特定于该项目,不应泄漏到任何其他项目的类路径中。
话虽如此,共享模拟和其他测试资源有一个合法的用例。我们通常将这些称为测试装置,看起来这正是您想要的。
如果您使用的是 Gradle 5.6 或更高版本,则有直接支持。您必须应用该java-test-fixtures插件并将定义模拟的 Kotlin 测试源移动到src/testFixtures/kotlin. 实际的单元测试仍应驻留在test源集中。然后可以在其他项目中使用该装置testImplementation(testFixtures(project(":deepestModule")))。您可以在此处的 Gradle 用户指南中阅读更多相关信息。
如果您使用的是旧版本的 Gradle,则必须将测试装置与主要源代码分开。因此,在这种情况下,您必须使用测试代码创建一个新的子项目。在本项目中,将源放在main源集中,不要使用test配置。像普通库一样编写它,即使它仅用于测试。然后您可以按照您已经尝试过的方式使用它testImplementation(project(:deepestModule))。
顺便说一下,您在 Kotlin DSL 上使用 Groovy DSL 有什么特别的原因吗?由于您无论如何都在构建 Kotlin 项目,因此后者似乎更合适。
| 归档时间: |
|
| 查看次数: |
770 次 |
| 最近记录: |