我正在努力学习如何正确测试我的Android应用。现在我通常使用以下结构:
在我自己处理线程之前,我已经测试了应用程序。在这种情况下,我不知道如何验证我的包装器是否实际调用事件发布方法,因为这些方法是在回调上调用的。我该怎么做才能解决这个问题?
我能想到的唯一解决方案是不使用回调,但它们非常方便。是不是为了测试而自行处理的事情呢?
我只能猜测我的架构方法对于测试而言很差。
编辑:这个问题表明将测试分成以下是个好主意:
1.-测试您的异步过程是否正确提交。您可以模拟接受异步请求的对象,并确保提交的作业具有正确的属性等。 2.-测试你的异步回调正在做正确的事情。在这里,您可以模拟最初提交的作业并假设它已正确初始化并验证您的回调是否正确。
但是如何在不模仿Retrofit服务的情况下测试第一部分(因为不应该模拟第三方代码)?
答案 0 :(得分:1)
尝试将Rx与Retrofit一起使用。它使同步Rx请求成为异步,从而避免了回调的需要。更重要的是,您可以从Rx机制中获得完美的回调,这将有助于您正确测试。
答案 1 :(得分:1)
可以通过使用同步执行程序创建适配器来测试改进异步回调。
在适配器工厂中,我使用以下方法创建一个Retrofit适配器,用于使用Robolectric和WireMock进行测试。 WireMock充当baseURL上的服务器,并通过Retrofit返回REST API上的请求响应。
public static RestAdapter synchronousAdapter(Context context, String baseUrl) {
RestAdapter.Builder builder = initiateBuilder(context);
builder.setEndpoint(baseUrl);
Executor synchronous = new SynchronousExecutor();
builder.setExecutors(synchronous, synchronous);
return builder.build();
}
private static final class SynchronousExecutor implements Executor {
@Override public void execute(Runnable r) {
r.run();
}
}