带有碎片场景的java单元测试匕首片段
我正在尝试使用Android Jetpack导航组件和片段测试库测试片段交互。 我的应用程序使用java+Dagger2作为DI
为了测试导航,我创建了一个JUnit测试:
@Test
public void testNavigationToLoginFragment() {
// Create a mock NavController
NavController mockNavController = mock(NavController.class);
// Create a graphical FragmentScenario for the Intro Fragment
FragmentScenario<IntroFragment> introFragmentScenario = FragmentScenario.launchInContainer(IntroFragment.class);
// Set the NavController property on the fragment
introFragmentScenario.onFragment(fragment ->
Navigation.setViewNavController(fragment.requireView(), mockNavController)
);
// Verify that performing a click prompts the correct Navigation action
onView(withId(R.id.button_login)).perform(click());
verify(mockNavController).navigate(R.id.action_intro_fragment_to_login_fragment);
}
每当我运行测试时,都会出现以下错误:
java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: No injector factory bound for Class<XXX>
我怎样才能把我的碎片注射到那里?可以将匕首碎片与FragmentScenario
一起使用吗
IntroFragment
public class IntroFragment extends DaggerFragment{
@Inject
CreateQuoteRecyclerViewAdapter createQuoteRecyclerViewAdapter;
@Inject
public ViewModelProvider.Factory factory;
@inject
public MyViewModel viewModel;
.....
}
MyViewModel。java
class CreateOrSignInViewModel extends BaseViewModel() {
@Inject
public CreateOrSignInBindingState state;
......
}
# 1 楼答案
在测试类中声明以下函数:
其中
TestApp
被声明为:为了避免出现错误,可能需要这样做,这将发生在自定义应用程序类的
onCreate()
方法中,其中正在构造匕首树完成此设置后,您可以开始编写单元测试: