Android 在我的测试中,我需要Robolectric和Mockito,每个人都提出自己的测试运行者

Android 在我的测试中,我需要Robolectric和Mockito,每个人都提出自己的测试运行者,android,unit-testing,mockito,robolectric,Android,Unit Testing,Mockito,Robolectric,在我的测试中,我需要Robolectric和Mockito,每个人都提出自己的TestRunner,我该怎么做 我有以下代码: @RunWith(MockitoJUnitRunner.class) @EBean public class LoginPresenterTest { @Bean LoginPresenter loginPresenter; @Mock private LoginView loginView; @AfterInject

在我的测试中,我需要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

有人告诉我使用
LoginPresenter\uu
构造函数,这样我就可以自己强制注入依赖项:

LoginPresenter loginPresenter = LoginPresenter_.getInstance_(context);
为了访问上下文,我必须从单元测试切换到Android工具测试,并执行
getInstrumentation().getTargetContext()
但是我想要单元测试,而不是仪器测试

所以另一个人告诉我使用
robololectric
,它应该能够为我提供一个应用程序上下文

然而,当我看到
robololectric
的入门页面时,它说

@RunWith(RobolectricGradleTestRunner.class)

这将与我目前为Mockito提供的
@RunWith
注释相冲突,那么我该怎么办?

使用Robolectric runner。Robolectric使用自己的类加载器,有利于替代Android API,因此它确实需要自己处理类加载。没有其他方法可以使用机器人分子

有几种初始化Mockito的方法(请参阅),它们严格等同于使用runner,但对您的情况最有意义的两种方法是:

  • 使用,因为您已经在JUnit4上:

    @Rule public MockitoRule rule = MockitoJUnit.rule();
    
  • 在之前和之后创建手动
    @方法:

    @Before public void setUpMockito() {
      MockitoAnnotations.initMocks(this);
    }
    
    @After public void tearDownMockito() {
      Mockito.validateMockitoUsage();
    }