我正在使用非常简单且可能非常常见的方案。这是我的示例依赖项:
public class MyDependency {
@Inject
public MyDependency(...) {
...
}
}
我没有在任何模块中列出以上内容(也就是说,MyDependency没有@Provides
)。
我的示例用例是这样的:
public class ThePresenter {
@Inject
MyDependency myDependency;
public ThePresenter() {
App.getInstance().getAppComponent().inject(this);
}
}
现在,我想在单元测试中模拟我的依赖关系。我不想使用模块替代(这意味着我必须为所有标有@Inject构造函数的依赖项添加@Provides),测试组件等。对于此问题,除了标准和简单的方法之外,还有其他替代方法吗?
答案 0 :(得分:0)
只是嘲笑它?
public class ThePresenterTest {
@Mock MyDependency myDependency;
private ThePresenter presenter;
@Before
public void setup() {
initMocks(this);
presenter = new ThePresenter();
}
}
答案 1 :(得分:0)
您需要使用构造函数注入,而不是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);
....
}
}