Android 在活动中插入ViewModelFactory.Provider进行浓缩咖啡测试
关于这个问题: 在我的测试中,为了让有关Android架构组件的浓缩咖啡测试能够正常工作,我在一个活动中经历了一次又一次的尝试,获得了ViewModelFactory.Provider。我希望它很简单,但我想它不是 让它处理片段的示例很简单:Android 在活动中插入ViewModelFactory.Provider进行浓缩咖啡测试,android,dagger-2,Android,Dagger 2,关于这个问题: 在我的测试中,为了让有关Android架构组件的浓缩咖啡测试能够正常工作,我在一个活动中经历了一次又一次的尝试,获得了ViewModelFactory.Provider。我希望它很简单,但我想它不是 让它处理片段的示例很简单: 但是,这根本不适用于活动,因为在使用ActivityTestRule创建活动之前,我无法获取活动的依赖项 我使用Dagger2遵循与上述示例相同的新依赖项注入流,使用HasActivityInjector接口 谢谢你的帮助 可以通过在@Before方法的
但是,这根本不适用于活动,因为在使用
ActivityTestRule
创建活动之前,我无法获取活动的依赖项我使用Dagger2遵循与上述示例相同的新依赖项注入流,使用
HasActivityInjector
接口
谢谢你的帮助 可以通过在@Before方法的TestApp中注册自定义ActivityLifecycleCallbacks来设置注入的活动属性 例如:
@Before
public void init(){
UserFragment fragment = UserFragment.create("foo");
viewModel = mock(UserViewModel.class);
when(viewModel.getUser()).thenReturn(userData);
when(viewModel.getRepositories()).thenReturn(repoListData);
navigationController = mock(NavigationController.class);
TestApp testApp = ((TestApp) InstrumentationRegistry.getContext().getApplicationContext());
testApp.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
//will be called before the onCreate method of your activity
activity.setViewModelFactory(ViewModelUtil.createFor(viewModel));
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
fragment.viewModelFactory = ViewModelUtil.createFor(viewModel);
fragment.navigationController = navigationController;
fragment.dataBindingComponent = () -> fragmentBindingAdapters;
activityRule.getActivity().setFragment(fragment);
}
.setViewModelFactory()
不是一种方法
@Before
public void init(){
UserFragment fragment = UserFragment.create("foo");
viewModel = mock(UserViewModel.class);
when(viewModel.getUser()).thenReturn(userData);
when(viewModel.getRepositories()).thenReturn(repoListData);
navigationController = mock(NavigationController.class);
TestApp testApp = ((TestApp) InstrumentationRegistry.getContext().getApplicationContext());
testApp.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
//will be called before the onCreate method of your activity
activity.setViewModelFactory(ViewModelUtil.createFor(viewModel));
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
fragment.viewModelFactory = ViewModelUtil.createFor(viewModel);
fragment.navigationController = navigationController;
fragment.dataBindingComponent = () -> fragmentBindingAdapters;
activityRule.getActivity().setFragment(fragment);
}