我正在使用Mockito为我的Android应用程序编写单元测试。 我正在使用匕首2在模拟客户端和真实客户端之间切换:
@Module
public class ApiModule {
private boolean mMockMode;
@Provides
@Singleton
Client provideClient() {
if (mMockMode) {
return Mockito.mock(Client.class);
}
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.networkInterceptors().add(new StethoInterceptor());
return new OkClient(okHttpClient);
}
}
客户端被注入到这样的测试中:
public class MainActivityTest extends ActivityInstrumentationTestCase2<BaseActivity> {
@Inject
Client client;
public MainActivityTest() {
super(MainActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
App app = (App) getInstrumentation().getTargetContext().getApplicationContext();
app.setMockMode(true);
app.component().inject(this);
}
@Test
public void testWithActualCall(){
//code...
}
@Test
public void testWithMockCall(){
//code...
}
@Override
protected void tearDown() throws Exception {
App.getInstance().setMockMode(false);
}
}
从代码中可以看出,我希望使用模拟api和其他我希望用真正的api做的测试。为了做到这一点,我需要知道正在调用哪个测试setUp()
,以便我可以相应地更改setMockMode(boolean)
的参数。
有没有办法可以找出哪个测试是setUp()
?
答案 0 :(得分:1)
将测试分为两类,一类是使用模拟API的所有测试,另一类是使用真实API。
使用您拥有的基类,将mockMode
的值移动到方法中,然后在另一个类中重写该方法:
public class MainActivityMockApiTest extends ActivityInstrumentationTestCase2<BaseActivity> {
...
@Override
protected void setUp() throws Exception {
...
app.setMockMode(isMockMode());
...
}
protected boolean isMockMode() {
// overridden in MainActivityRealApiTest
return true;
}
...
}