【问题标题】:not able to inject mock using Dagger无法使用 Dagger 注入模拟
【发布时间】:2022-01-11 18:13:21
【问题描述】:

我是 Dagger 和 Mockito 的新手。我正在尝试在单元测试中使用 Dagger 模块中定义的构造函数,以便使用默认值创建对象。

这是模块:

@模块 类 AutoCloseCountDownTimerModule {

@Provides
@Singleton
fun getAutoCloseCountDownTimer(
    userInteractionClient: UserInteractionClient,
    rxPositionManager: RxPositionManager
): AutoCloseCountDownTimer {
    return AutoCloseCountDownTimer(userInteractionClient, rxPositionManager, 15000, 45000)
}

这就是我尝试在单元测试中模拟 AutoCloseCountDown 类的方式:

@RunWith(MockitoJUnitRunner.class) 公共类 AutoCloseCountDownTimerTest {

@Mock
private AutoCloseCountDownTimer autoCloseCountDownTimer;

@Before
public void setUp() {
    MockitoAnnotations.initMocks(this);
}

@Test
public void basicTest() {
    final AutoCloseCountDownTimer.Listener mockListener = Mockito.mock(AutoCloseCountDownTimer.Listener.class);
    autoCloseCountDownTimer.registerListener(mockListener);

    final int expectedValue = 10;
    autoCloseCountDownTimer.notifyOnAutoClose(expectedValue);
    Mockito.verify(mockListener).onAutoClose(expectedValue);

如何实现 autoclosedCountDownTimer 将在 Test 中使用 dagger 预定义的值?

【问题讨论】:

    标签: java android junit mockito dagger-2


    【解决方案1】:

    您通常不会尝试这样做。在测试中,您通常不会将参数注入到被测对象中,而是直接通过 new 传递它们。可以是常规项目或模拟项目。

    如果确实需要注入,则需要设置一个模块,该模块通过使用 @Provides 注释的函数提供对象,并在实例化对象时创建模拟并将其传递给参数。您还需要对您没有模拟的任何依赖项进行传递。然后为该模块和您需要的任何其他模块创建一个组件,并使用该组件进行注入。但是如果可能的话,你真的想避免这种情况,单元测试应该是关于测试小块功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多