如何在多模块gradle项目中提供测试数据和类

我想为下游模块提供来自上游模块的测试数据/类。 什么是最好的方法来做到这一点?

假设我有以下模块:

:data-transactions – 有一个接口TransactionsCache 。 这个模块默认会提供一个TransactionDbCache ,它用SQLite备份这个缓存。

:ui-transactions – 需要一个TransactionsCache实例向用户显示事务。 这个模块依赖于:data-transactions

我想要的是

  • 在测试:ui-transactions ,我想提供一个TransactionsCache的假实现,比如TransactionsInMemoryCache:data-transactions其他下游模块也可能需要TransactionsInMemoryCache 。 这个类不应该包含在非测试模块中。
  • TransactionsInMemoryCache这样的测试依赖关系应该能够利用kotlin internal可见性修饰符 – 即与以下模块处于相同的模块:data-transactions

我猜这里的解决方案是与srcSets和一个特殊的testHelper配置?

注意:这是为Android,所以我需要生成一个APK。 这可能没有味道?

有两种方法

  1. 在与主jar相同的项目中创建一个测试jar,可以在其他项目中用作测试依赖项。 这个jar将是src/test/java (编译)和src/test/resources
  2. 为通用测试实用程序创建一个单独的项目,可用作其他项目中的测试依赖项

我,我自己,更喜欢选项2,因为我觉得这是最干净的方法,因为你把正是你想要的jar(测试实用程序,抽象的基类,测试资源等),你不包括在罐子里的实际测试。

请参阅选项1的nebula-test-jar插件。请注意,星云已弃用此插件而支持选项2