Android 改装测试、回调?

Android 改装测试、回调?,android,testing,callback,retrofit,Android,Testing,Callback,Retrofit,我正在努力学习如何正确测试我的Android应用程序。现在我通常使用以下结构: 模型 改造(让它通过回调处理线程) 用于在成功和失败时发布事件的改装调用的包装器 由演讲者挑选 主持人 观点 我曾经在自己处理线程的地方测试过应用程序。在这种情况下,我不知道如何验证我的包装器是否真正调用了事件发布方法,因为这些方法是在回调时调用的。我能做些什么来解决这个问题 我能想到的唯一解决方案是不使用回调,但它们非常方便。仅仅为了测试而自己处理事情,这不是倒退了一步吗 我只能猜测我的架构方式对于测试来说很糟

我正在努力学习如何正确测试我的Android应用程序。现在我通常使用以下结构:

  • 模型
  • 改造(让它通过回调处理线程)
  • 用于在成功和失败时发布事件的改装调用的包装器 由演讲者挑选
  • 主持人
  • 观点
我曾经在自己处理线程的地方测试过应用程序。在这种情况下,我不知道如何验证我的包装器是否真正调用了事件发布方法,因为这些方法是在回调时调用的。我能做些什么来解决这个问题

我能想到的唯一解决方案是不使用回调,但它们非常方便。仅仅为了测试而自己处理事情,这不是倒退了一步吗

我只能猜测我的架构方式对于测试来说很糟糕

编辑:此问题建议将测试拆分为:

1.-测试异步进程是否正确提交。您可以模拟接受异步请求的对象,并确保提交的作业具有正确的属性等。 2.-测试异步回调是否正确。在这里,您可以模拟最初提交的作业,假设它已正确初始化,并验证回调是否正确


但是如何在不模拟改装服务的情况下测试第一部分(因为不应该模拟第三方代码)?

尝试使用Rx进行改装。它使同步Rx请求成为异步的,从而避免了回调的需要。更重要的是,您可以从Rx机制获得完美的回调,这将帮助您正确地进行测试


查看改造异步回调可以通过创建带有同步执行器的适配器进行测试

在适配器工厂中,我使用以下方法创建一个改装适配器,用于使用Robolectric和WireMock进行测试。WireMock充当baseURL上的服务器,并通过改造返回RESTAPI上请求的响应

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();
    }
}

您可能希望通过改装来查看可观察对象,它们也非常方便,而且测试它们要容易得多。但是,在使用RxJava时,继续使用事件总线是否不好?根据您的问题,我推测您正在使用事件总线来发布成功和失败事件。由于Rx已经为您提供了完成、新数据点或错误发生的回调,我建议您使用这些回调,而不是事件总线。这并没有解释如何为改造观测值编写单元测试。