Android本地测试与仪表测试

时间:2016-03-03 16:16:30

标签: android unit-testing retrofit2

我试图检查我的API是否在单元测试中可用,以确保它以200响应。

现在,我的问题是,我不确定何时使用本地测试以及何时必须使用 Android Instrumentation测试。我知道我必须使用Instrumented Tests进行UI测试,但是如何测试端点?

我使用Retrofit2进行通信。并尝试使用Local Tests以两种方式测试Endpoint。

示例1(同步,不起作用)

public class EndpointTest {

    EndpointApi api;
    SimpleInjection simpleInjection;

    @Before
    public void setUp() {
        simpleInjection = new SimpleInjection();
        api = simpleInjection.getEndpointApi();
    }

    @Test
    public void endpoint_1_isAvailable() {
        Call<ApiResponse> rootCall = api.getRoot();
        try {
            int reponseCode = rootCall.execute().code();
            Assert.assertEquals(200, reponseCode);

        } catch (IOException e) {
            Assert.fail();
        }
    }         
}

示例2(异步,确实有效)

public class EndpointTest {

    EndpointApi api;
    SimpleInjection simpleInjection;

    @Before
    public void setUp() {
        simpleInjection = new SimpleInjection();
        api = simpleInjection.getEndpointApi();
    }

    @Test
    public void endpoint_2_isAvailable() {
    Call<ApiResponse> rootCall = api.getRoot();

        rootCall.enqueue(new Callback<ApiResponse>() {
            @Override
            public void onResponse(Call<ApiResponse> call, Response<ApiResponse> response) {
                Assert.assertEquals(200, response.code());
            }

            @Override
            public void onFailure(Call<ApiResponse> call, Throwable t) {
                Assert.fail();
            }
        });
    }         
}

我是否必须使用Android Instrumentation Test进行异步模式?

1 个答案:

答案 0 :(得分:1)

是否在开发计算机或Android设备/模拟器上的本地JVM上运行测试的决定不是基于您的代码是否同步。通常你只想在本地运行单元测试,因为它更快,并允许你使用TDD。您的测试执行网络请求,因此它们不是单独测试,因为它们依赖于服务器 - 它们是集成测试。最好在Android设备上运行集成测试以获得更好的反馈。