J. *_* K. 18 android unit-testing mockito robolectric
在我的测试中我需要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();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是AndroidAnnotations
没有注入依赖项,我在尝试使用时获得了NPELoginPresenter
有人告诉我使用LoginPresenter_
构造函数,以便我可以通过这种方式强制注入依赖项:
LoginPresenter loginPresenter = LoginPresenter_.getInstance_(context);
Run Code Online (Sandbox Code Playgroud)
为了获得对上下文的访问,我不得不从单元测试切换到Android Instrumentation测试,getInstrumentation().getTargetContext()
但我想要单元测试,而不是仪器测试.
所以另一个人告诉我使用Robolectric
它 - 它应该能够为我提供应用程序上下文.
但是,当我查看入门页面时Robolectric
,它说
@RunWith(RobolectricGradleTestRunner.class)
Run Code Online (Sandbox Code Playgroud)
这将与我目前@RunWith
对Mockito的注释冲突,所以我该怎么办?
Jef*_*ica 31
使用Robolectric转轮.Robolectric使用自己的类加载器,有利于它替代Android API,所以它确实需要自己处理类加载.没有其他方法可以使用Robolecric.
有几种方法可以初始化Mockito(请参阅此SO答案),这与使用跑步者完全相同,但对您的案例最有意义的两种方法是:
使用MockitoRule,因为你已经在JUnit4上:
@Rule public MockitoRule rule = MockitoJUnit.rule();
Run Code Online (Sandbox Code Playgroud)创建手册@Before
和@After
方法:
@Before public void setUpMockito() {
MockitoAnnotations.initMocks(this);
}
@After public void tearDownMockito() {
Mockito.validateMockitoUsage();
}
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
4133 次 |
最近记录: |