当前位置: 首页 > 知识库问答 >
问题:

匕首2如何将对象注入测试

陈君之
2023-03-14

我想在单元测试模块中使用我的领域管理器。我做的

@Singleton
@Component(modules = {
        TestApplicationModule.class,
        AndroidSupportInjectionModule.class,
        TestStoreDataModule.class,
        TestUtilsModule.class})
public interface AppComponentTest extends AppComponent {

    @Component.Builder
    interface Builder {

        @BindsInstance
        AppComponentTest.Builder application(Application application);

        AppComponentTest build();
    }
}

然后我想实现

@RunWith(RobolectricTestRunner.class)
@Config(application = TestVerioriApplication.class, sdk=27)
public class BaseVerificationQuestionnaireFragmentTest {

    @Inject
    RealmManager realmManager;
}

但是realmManager为空。如何使用匕首2编写简单的模块测试?我用了匕首模拟,但没有用。我的模块包含

@Module(includes = StoreDataModule.class)
public class TestStoreDataModule {

    @Provides
    @Singleton
    public static RealmConfiguration provideRealmConfiguration(RealmConstants realmConstants) {
        return new RealmConfiguration.Builder()
                .name(realmConstants.getName())
                .encryptionKey("Implement this key".getBytes())
                .schemaVersion(realmConstants.getSchemaVersion())
                .build();
    }

    @Provides
    @Singleton
    public static RealmManager provideRealmManager(RealmConfiguration realmConfiguration, SchedulerProvider schedulerProvider) {
        return new RealmManager(realmConfiguration, schedulerProvider);
    }

}

我尝试了谷歌的一切,但我不知道如何从图形中注入对象

共有1个答案

颜修为
2023-03-14

重写您的Application类,在那里您将用TestComponent替换dagger组件实例。然后通过覆盖需要添加测试应用程序的Android JUnitRunner类来创建自己的测试运行程序:

class TestRunner : AndroidJUnitRunner() {
   @Throws(InstantiationException::class,IllegalAccessException::class,ClassNotFoundException::class)
 override fun newApplication(cl:ClassLoader,className:String, context:Context):Application {
        return super.newApplication(cl, TestApplication::class.java.name, context)
  }
}

接下来在build.gradle文件中注册您的运行程序:

testInstrumentationRunner“com.test.YourTestRunner”

现在,您可以在测试组件中替换要在测试中更改的模块的实现。

 类似资料:
  • 问题内容: 说我有一个带对象的 Util 类-类 Validator的 一个实例。 由于我想避免在Util中实例化Validator类,因此我通过构造函数将其传递给: 我有一个提供Validator实例的模块: 以及一个Util类的实例: 我有一个连接好的组件,可以给我一个Util实例: 所以在我的活动中,我可以这样称呼它: 所有这些都可以正常工作-myUtil在实例化时具有Validator类的

  • 我有一个库项目/模块,Android应用程序和普通java应用程序都使用它。在Dagger 1中,此项目/模块具有属性。其中有一个@Inject字段,任何类实现或@Provides方法都不能满足该字段。其想法是强制具有的“顶部”模块提供特定于系统的实现 举个例子:在library项目中,我有一个ActLogin活动,它有字段。此字段的值在登录到服务器时使用。ActLogin由使用此库的多个应用程序

  • 我正在使用Dagger 2,在为我的类实现测试时,模块中的generate singleton providers存在一些问题。 所以我有两个问题。 > 我不能使用构造函数注入,因为有一个默认的构造函数。如何从测试模块中获取Foo? 在和中,如何确保在运行每个测试时创建的新实例? 谢谢

  • 问题内容: 我是新手,并尝试构建这样的示例以了解其工作原理。 有我的示例代码: 如您在我注入的样本中所见 我也想使用提供值作为此方法的参数。 最终我得到了这样的错误 我究竟做错了什么? 我应该如何以正确的方式提供此参数以避免此类错误? 问题答案: 您需要使用 限定符注释 并在注入依赖时使用此限定符 希望能帮助到你!另请查看官方文档-http: //google.github.io/dagger/

  • 我使用Dagger-Hilt进行依赖注入,但是我不知道如何在抽象类中进行字段注入。 [DI包] 我使用匕首剑柄(AppModule.kt)将“ErrorHandler”作为单例提供 扩展到BaseUseCase以上的用例都是为匕首剑柄(UseCaseModule.kt)编写的。 > 我尝试使用匕首柄(如BaseUseCaseModule.kt)提供或绑定BaseUseCase类,但是由于它具有类型

  • 我目前正在尝试将匕首2集成到一个Android应用程序中。我的项目设置如下: 库 应用程序(取决于库) 在我的library项目中,我定义了一个类,以后我将把它注入到库和app项目中需要它的其他类(活动和常规类)中。 我也是这么想的,因为实际上myManager总是空的。很明显,它的构造函数也从来没有被调用过,所以我想我一定遗漏了一些配置方面的东西?或者也许我误解了文档,它根本不是这样工作的?My