gpt4 book ai didi

android - 在我的测试中我需要 Robolectric 和 Mockito,每个人都提出自己的 TestRunner

转载 作者:IT老高 更新时间:2023-10-28 23:20:41 30 4
gpt4 key购买 nike

我的测试中同时需要 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 没有注入(inject)依赖项,我在尝试使用 LoginPresenter

时得到了 NPE

有人告诉我使用 LoginPresenter_ 构造函数,这样我就可以通过这种方式自己强制注入(inject)依赖项:

LoginPresenter loginPresenter = LoginPresenter_.getInstance_(context);

为了访问上下文,我不得不从单元测试切换到 Android 仪器测试并执行 getInstrumentation().getTargetContext()但我想要单元测试,而不是仪器测试。

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

但是,当我查看 Robolectric 的入门页面时,它说

@RunWith(RobolectricGradleTestRunner.class)

这将与我当前为 Mockito 的 @RunWith 注释发生冲突,我该怎么办?

最佳答案

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

有几种初始化 Mockito 的方法(请参阅 this SO answer ),它们严格等同于使用运行器,但最适合您的情况的两种方法是:

  • 使用 MockitoRule ,因为您已经在 J​​Unit4 上:

    @Rule public MockitoRule rule = MockitoJUnit.rule();
  • 手动创建@Before@After方法:

    @Before public void setUpMockito() {
    MockitoAnnotations.initMocks(this);
    }

    @After public void tearDownMockito() {
    Mockito.validateMockitoUsage();
    }

关于android - 在我的测试中我需要 Robolectric 和 Mockito,每个人都提出自己的 TestRunner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36082370/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com