【发布时间】:2016-08-18 16:05:22
【问题描述】:
我正在尝试实现自己的 observables 或从其他语言移植它们以获得乐趣和利润。
我遇到的问题是关于如何正确测试可观察对象或一般异步代码的信息很少。
考虑以下测试代码:
// Create a stream of values emitted every 100 milliseconds
// `interval` uses Timer internally
final Stream<Number> stream =
Streams.interval(100).map(number -> number.intValue() * 10);
ArrayList<Number> expected = new ArrayList<>();
expected.add(0);
expected.add(10);
expected.add(20);
IObserver<Number> observer = new IObserver<Number>() {
public void next(Number x) {
assertEquals(x, expected.get(0));
expected.remove(0);
if(expected.size() == 0) {
stream.unsubscribe(this);
}
}
public void error(Exception e) {}
public void complete() {}
};
stream.subscribe(observer);
一旦订阅了流,它就会发出第一个值。 onNext被调用...然后测试成功退出。
如今,在 JavaScript 中,大多数测试框架都为测试用例提供了一个可选的 Promise,您可以在成功/失败时异步调用它。 Java有类似的东西吗?
【问题讨论】:
标签: java unit-testing testing asynchronous reactive-programming