如何在多模块gradle项目中提供测试数据和类
我想为下游模块提供来自上游模块的测试数据/类。 什么是最好的方法来做到这一点?
假设我有以下模块:
:data-transactions
– 有一个接口TransactionsCache
。 这个模块默认会提供一个TransactionDbCache
,它用SQLite备份这个缓存。
:ui-transactions
– 需要一个TransactionsCache
实例向用户显示事务。 这个模块依赖于:data-transactions
。
我想要的是
- 在测试
:ui-transactions
,我想提供一个TransactionsCache
的假实现,比如TransactionsInMemoryCache
。:data-transactions
其他下游模块也可能需要TransactionsInMemoryCache
。 这个类不应该包含在非测试模块中。 - 像
TransactionsInMemoryCache
这样的测试依赖关系应该能够利用kotlininternal
可见性修饰符 – 即与以下模块处于相同的模块:data-transactions
我猜这里的解决方案是与srcSets
和一个特殊的testHelper
配置?
注意:这是为Android,所以我需要生成一个APK。 这可能没有味道?
有两种方法
- 在与主jar相同的项目中创建一个测试jar,可以在其他项目中用作测试依赖项。 这个jar将是
src/test/java
(编译)和src/test/resources
- 为通用测试实用程序创建一个单独的项目,可用作其他项目中的测试依赖项
我,我自己,更喜欢选项2,因为我觉得这是最干净的方法,因为你把正是你想要的jar(测试实用程序,抽象的基类,测试资源等),你不包括在罐子里的实际测试。
请参阅选项1的nebula-test-jar插件。请注意,星云已弃用此插件而支持选项2