gpt4 book ai didi

android - 确定正在调用哪个测试设置()?

转载 作者:行者123 更新时间:2023-11-30 01:45:02 25 4
gpt4 key购买 nike

我正在使用 Mockito 为我的 Android 应用编写单元测试。我正在使用 dagger 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);

}

}

客户端被注入(inject)到这样的测试中:

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()

最佳答案

将测试分为 2 个类,一个包含所有使用模拟 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;
}

...
}

关于android - 确定正在调用哪个测试设置()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33854561/

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