确定调用哪个测试设置()?

时间:2015-11-22 12:06:35

标签: android unit-testing mockito dagger-2

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

1 个答案:

答案 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;
    }

    ...
}