gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:03:15 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com