android - 模块中未列出的模拟依赖项

标签 android mockito dagger-2

我正在使用非常简单且可能非常常见的场景。这是我的示例依赖项:

public class MyDependency {
   @Inject
   public MyDependency(...) {
      ...
   }
}

我没有在任何模块中列出以上内容(也就是说,MyDependency 没有 @Provides)。

我的示例用例是这样的:

public class ThePresenter {
   @Inject
   MyDependency myDependency;

   public ThePresenter() {
      App.getInstance().getAppComponent().inject(this);
   }
}

现在我想在单元测试中模拟我的依赖。我不想使用模块覆盖(这意味着我必须为所有标有 @Inject 构造函数的依赖项添加 @Provides)、测试组件等。对于这个问题,除了标准和简单的方法之外,还有其他替代方法吗?

最佳答案

你需要使用构造函数注入(inject),而不是你的注入(inject)点在 Presenter 类构造函数里面。通过在构造函数上添加 @Inject 注释(就像您对依赖项所做的那样),将 Presenter 暴露给 dagger2:

public class ThePresenter {

   private final MyDependency myDependency;

   @Inject public ThePresenter(MyDependency myDependency) {
      this.myDependency = myDependency;
   }
}

然后这允许反转控制并提供依赖项/模拟。

用法:

public class ThePresenterTest {

   @Mock private MyDependency myDependency;

   private ThePresenter presenter;

   @Before public void setup() {
      MocktioAnnotations.initMocks(this);
      presenter = new ThePresenter(myDependency);

      Mockito.when(myDependency.someMethod()).thenReturn(someValue);
      ....
   }
}

关于android - 模块中未列出的模拟依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57837329/

相关文章:

java - 安卓测试: verify onClickListener using private anonymous class

java - Dagger 2 与注入(inject)器类

java - 将外部图像加载到 GridView (无图像)

java - 使用 PowerMock 模拟私有(private)方法

java - 如何模拟构造函数中设置的属性

android - Dagger 2 瞄准镜说明

android - Kotlin Dagger2 - 找不到符号 DataBindingComponent

Android 应用程序在扫描 iBeacons 的后台服务上非常不稳定

javascript - 来自 javascript 的 Google Play 商店应用内结算

java - ActionBar 上下文菜单