【问题标题】:Gradle: Override Class from main sourceSet in Test sourceSetGradle:从测试源集中的主要源集中覆盖类
【发布时间】:2015-04-02 20:35:30
【问题描述】:

我有一个提供 Dagger 模块的 Modules 类。在运行我的单元测试和 androidTests 时,我想覆盖这个类,类似于你可以覆盖不同构建类型或风格的类。

这可能吗?目前,当我尝试在我的test sourceSet 中创建一个与main sourceSet 中的相应类具有相同限定名称的类时,我遇到了Duplicate class file found 错误。

最后,我想在单元测试期间提供稍微不同的数据库。

【问题讨论】:

  • 这就是依赖注入的作用;)
  • @OliverCharlesworth 是的 - 这就是我使用它的原因。
  • 好的,那么唯一的问题是您的测试课程与您的真实课程具有相同(合格)的名称吗?通过将其命名为TestDatabase(或其他名称),这肯定是可以轻松绕过的吗?
  • @OliverCharlesworth 如果它没有相同的限定名称,那么我的main sourceSet 中的所有代码将如何知道使用它。或者更确切地说,我怎样才能告诉我的main sourceSet 中的代码使用TestDataModule 而不是DataModule?我想在我的所有测试中使用相同的 objectGraph。如果我必须重新创建 objectGraph - 这是一个问题,因为我的数据需要多长时间才能初始化。
  • 但是不就是DI的意义吗?我没有使用 Dagger,所以我无法评论如何利用它,但基本概念是在测试期间,您提供一个 TestDataModule 实例而不是 DataModule 实例。或者,您提供一个构造相关实例的工厂。

标签: java android unit-testing gradle dagger


【解决方案1】:

最简单的方法不是重写类(您已经注意到它不起作用)。相反,您可以定义一个通用接口,然后对其进行两种不同的实现。一种用于main,一种用于test

这样,测试可以提供一个Test<Something> 对象,而应用程序代码提供一个<Something>,而您正在测试的类不会知道其中的区别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-11
    • 2016-09-07
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多