我需要在我的测试中同时使用Robolectric和Mockito,它们各自提供了自己的TestRunner,我该怎么办?
我有以下代码:
@RunWith(MockitoJUnitRunner.class)
@EBean
public class LoginPresenterTest {
@Bean
LoginPresenter loginPresenter;
@Mock
private LoginView loginView;
@AfterInject
void initLoginPresenter() {
loginPresenter.setLoginView(loginView);
}
@Test
public void whenUserNameIsEmptyShowErrorOnLoginClicked() throws Exception {
when(loginView.getUserName()).thenReturn("");
when(loginView.getPassword()).thenReturn("asdasd");
loginPresenter.onLoginClicked();
verify(loginView).setEmailFieldErrorMessage();
}
}
问题在于AndroidAnnotations
没有注入依赖项,当我尝试使用LoginPresenter
时会出现NPE。
有人告诉我使用LoginPresenter_
构造函数,这样我就可以强制自己注入依赖关系:
LoginPresenter loginPresenter = LoginPresenter_.getInstance_(context);
为了获得上下文的访问权限,我不得不从单元测试切换到Android仪器化测试,并使用
getInstrumentation().getTargetContext()
。
但是我想要单元测试,而不是仪器化测试。
所以另一个人告诉我要使用Robolectric
- 它应该能够为我提供应用程序上下文。
然而,当我查看Robolectric
的入门页面时,它说:@RunWith(RobolectricGradleTestRunner.class)
这将与我当前为 Mockito 设置的 @RunWith
注解相冲突,那么我该怎么办?