Android 本地测试与仪器化测试

Android Local Tests vs Instrumented Test

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

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

我使用 Retrofit2 进行通信。并尝试使用本地测试以两种方式测试端点。

示例 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 吗?

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