【发布时间】:2019-05-28 13:09:14
【问题描述】:
我正在尝试使用 Espresso 编写 UI 测试,我有一个需要模拟的视图模型。但是在这个模拟视图模型中,有几个 @Inject 字段为空,这会导致各种麻烦。
这是视图模型本身(为了简单起见更改了名称和内容,但代码完全相同)
public class MyViewModel extends ViewModel {
private final MyFieldRepository myFieldRepository;
@Inject
public MyViewModel(MyFieldRepository myField) {
this.myFieldRepository = myField; //remains null
}
public void start() { //NPE here
myFieldRepository.startAPI() //... async call code
}
}
以及视图模型 Dagger Module
@Module
public class MyViewModelModule {
@Provides
@IntoMap
@ViewModelKey(MyViewModel.class)
public ViewModel providesMyViewModel() {
MyViewModel myViewModel = Mockito.mock(MyViewModel.class);
return pinPadViewModel;
}
}
最后是字段模块(我想被注入)
@Module
public class MyFieldRepositoryModule {
@Provides
@AppScoped
public MyFieldRepository providesMyField() {
MyFieldRepository myField = Mockito.mock(MyFieldRepository.class);
return myField;
}
}
这是组件代码:
@AppScoped
@Component(modules = {
MyViewModelModule.class,
MyFieldModule.class,
})
public interface TestAppComponent extends AndroidInjector<TestApp> {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
TestAppComponent build();
}
}
我想找到一种方法让 Dagger 使用 MyFieldModule 注入 myField。
【问题讨论】:
-
可以分享组件代码吗?
-
@VishalPawar 完成
-
您确定问题中的 mockito 标签吗?您的问题似乎与 JUnit 测试无关。
标签: android mockito viewmodel android-espresso dagger-2