0

所以这是我的项目的概述:模块 A 包含: - 所有 boxstore 数据 - 模块 A 中用于单元测试的 boxstore 模拟

模块 B 包含: - 注入了 BoxStore 的演示者 - PresenterTest 需要模拟 BoxStore

按照此链接模拟 BoxStore,当我在模块 A 中编写单元测试时,它工作正常。在模块 BI 中创建模拟时,得到 NoClassDefFoundError,我理解这是因为模块 B 测试不知道模块 A 测试对象。

所以我做了以下场景:

  1. 在模块 B 的 gradle 中添加:

sourceSets { test.java.srcDirs += [etc...] }

这样模块 B 就会知道模块 A 的模拟对象。

  1. 在模块 B 中复制 BoxStore 的模拟并在测试中使用它,但 BoxStore 在 build 文件夹下生成一个 java 文件,因此我无法创建我的模拟,因为一切都依赖于 MyObjectBox 来生成 BoxStore。

两种方法都失败了:(

关于如何解锁自己的任何想法?

4

1 回答 1

0

如果您使用的是 Gradle,请查看java-test-fixturesGradle 5.6.2 中引入的插件。它引入了一个新的testFixtures源集,您可以在其中放置特定模块的各种测试数据,以及允许其他模块在其测试中引用此数据的新 DSL。在您的情况下,我想您会将测试数据放在模块 A 的testFixtures目录中,并从模​​块 B 中引用它:

// module A
dependencies {
  testImplementation(testFixtures(project(":module-B")))
}
于 2019-10-15T01:03:20.347 回答