gpt4 book ai didi

java - 如何对异步调用进行单元测试?

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:52 24 4
gpt4 key购买 nike

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

最佳答案

简单地说:不要使用“裸机”线程。

改用 ExecutorServices - 因为这允许您使用依赖注入(inject)将多线程代码转换为单线程代码以进行测试 - 使用 Same Thread Executor Service .

示例:

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

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

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

要点是:当您直接使用线程时,您无法控制任何情况。最有可能的是,这将导致测试用例需要复杂的信号发送,或者更糟:依赖于在这里或那里调用 sleep() 。这总是不好的——它增加了测试的执行时间;或者,更糟糕的是,你弄错了时机;并且偶尔您的测试在回归过程中会失败。由于您的测试系统负载不同;和显示不同运行时特征的线程。

所以,长话短说:如果可能的话,避免直接使用线程;相反,使用上述概念来简单地避免多个线程进行测试。

关于java - 如何对异步调用进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39072669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com