android如何做单元测试对于异步调用?

标签: Java Android
发布时间: 2017/3/19 14:57:19
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想要做单元测试中的异步方法为 android 。结果必须是"由观察员的回调的通知"。看一看下面的例子。我怎能写 doSomething() 方法的单元测试用例?

public interface IFooObserver {
    void onResult(String result);
}

public class Foo {

    private IFooObserver mObserver;

    public Foo(IFooObserver observer) {
        mObserver = observer;
    }

    public void doSomething() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                // do something..
                mObserver.onResult("hello, world!");
            }
        }).start();
    }
}

解决方法 1:

简单地说︰ 不要使用"裸机"线程。

改用 ExecutorServices-因为这将允许您使用依赖注入来变成一个单线程的测试-事情的多线程的代码使用同一线程的遗嘱执行人 Service

示例︰

class Whatever {
   private final ExecutorService service;
   Whatever() { this ( Executors.newSingleThreadExecutor() ); }

   Whatever(ExecutorService service) { this.service = service; }

   void foo() {
     service.submit ( ... whatever

point是︰ 当您直接使用一个线程,你有没有丝毫控制。最有可能,这将导致测试用例需要复杂的信号,或者更糟︰ 依靠调用 sleep (),在这里或那里。那是总是坏的-它增加执行 time 的测试; 或者,更糟糕的是,你的时机错; 和偶尔你测试失败在回归期间。由于不同负荷对您的测试系统;和显示不同的运行时特性的线程。

所以,长话短︰ 如果可能,请避免使用线程直接;而是使用上述的概念只是避免测试的多个线程。

赞助商