小编Dan*_*der的帖子

Gradle 存储库解析

我正在努力将相对较大的代码库重构为较小的 Gradle 构建和/或模块,尝试使用新的 Kotlin DSL 和构建脚本的最佳实践。

我无法从文档中弄清楚的一个相当不成熟的问题是:我应该在哪里集中管理我的存储库声明?不同的结构如何影响所述存储库的分辨率?

详细说明这一点,我可以通过以下方式声明存储库:

  1. 根据以下内容allprojects {},不鼓励在文件内部或文件subprojects {}中进行交叉配置:build.gradle.kts
allprojects {
    repositories {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)
subprojects {
    repositories {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 使用文件dependencyResolutionManagement {}中的块settings.gradle.kts:
dependencyResolutionManagement {
    repositories {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 使用文件pluginManagement {}中的块settings.gradle.kts:
pluginManagement {
    repositories {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 使用buildscript {}块:
buildscript {
    repositories {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道这些声明以不同的方式影响构建生命周期不同部分的可用存储库。这就是重点。我什么时候应该使用它们中的每一种,或者在某些情况下应该使用其中不止一种?块中声明的存储库是否会dependencyResolutionManagement {}干扰下载插件的存储库(pluginManagement {}块内声明的存储库)?这些存储库是否以任何方式组合或覆盖,或者它们是完全独立的存储库集?

gradle

3
推荐指数
1
解决办法
1873
查看次数

Android 仪器测试中的 Dagger 2 注入

我正在尝试在 Android 仪器测试中使用 Dagger 2 进行 DI。它对于主应用程序组件中的类/活动/片段工作得很好,但我的测试组件似乎缺少一些我找不到的绑定。任何有关如何进行的想法将不胜感激。我的代码如下所示:

资产库测试

public class AssetRepositoryTest {

    @Nested
    @DisplayName("Given a populated database")
    public class PopulatedDatabaseInstance {

        @Inject
        private TestDatabase database;

        @Inject
        private AssetRepository repository;

        @BeforeEach
        public void setup() {
            final TestApplication application = ApplicationProvider.getApplicationContext();
            application.androidInjector().inject(this);
            
            // Setup database
        }
        
        // Tests
    }
}
Run Code Online (Sandbox Code Playgroud)

运行仪器测试时出现以下异常:

java.lang.IllegalArgumentException: No injector factory bound for Class<AssetRepositoryTest.PopulatedDatabaseInstance>
Run Code Online (Sandbox Code Playgroud)

与匕首相关的代码如下:

测试组件

@Singleton
@Component(modules = {
        AndroidSupportInjectionModule.class,
        TestPersistenceModule.class
})
public interface TestComponent extends AndroidInjector<TestApplication> {

    @Component.Builder
    abstract class Builder extends AndroidInjector.Builder<TestApplication> {
    }
} …
Run Code Online (Sandbox Code Playgroud)

java android dagger-2 instrumented-test

2
推荐指数
1
解决办法
1137
查看次数

标签 统计

android ×1

dagger-2 ×1

gradle ×1

instrumented-test ×1

java ×1