Android本地测试与仪器化测试的区别

3
我正在尝试检查我的 API 是否在单元测试中可用,以确保它能够响应 200。
现在,我的问题是我不确定何时使用“本地测试”和何时使用“Android 仪器测试”。我知道必须使用仪器测试进行 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来进行异步模式测试吗?


1
你把同步和异步的标题搞混了,从代码示例来看,示例1看起来是同步的,而示例2则是异步的。 - Bhargav
是的,没错。已经更正了。谢谢。 - shadox
1个回答

1
决定在开发机上的本地JVM还是在Android设备/模拟器上运行测试并不基于您的代码是否同步。通常,您只想在本地运行单元测试,因为这样更快,可以使用TDD。您的测试会进行网络请求,因此它们不是传统意义上的单元测试,因为它们具有对服务器的依赖性-它们是集成测试。最好在Android设备上运行集成测试以获得更好的反馈。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接