确定正在为哪个测试setup()调用



我正在使用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);
    }
}

客户端被注入到测试中,如下所示:

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);
    }
}

从代码中可以看出,我希望用mock api进行一些测试,也希望用real api进行其他测试。为了做到这一点,我需要知道调用哪个测试setUp(),这样我就可以相应地更改setMockMode(boolean)的参数。

有没有办法让我知道哪个测试是setUp()

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

相关内容

最新更新