gpt4 book ai didi

unit-testing - Rx TestScheduler 在 Return 和 Delay 中表现不佳

转载 作者:行者123 更新时间:2023-12-03 09:23:41 24 4
gpt4 key购买 nike

我在为包含 Return 组合的 observable 编写单元测试时遇到问题和 Delay .问题在于TestScheduler无论提前多少时间都不会发出任何通知。

var scheduler = new TestScheduler();
var input = new Subject<bool>();

var output = scheduler.Start(() =>
Observable.Return("feed me", scheduler)
.Delay(TimeSpan.FromSeconds(1), scheduler));

scheduler.AdvanceBy(1);
Assert.Equal(0, output.Messages.Count);

// Expecting an OnNext and an OnCompleted notification
scheduler.AdvanceBy(TimeSpan.FromSeconds(2).Ticks);
Assert.Equal(2, output.Messages.Count);

奇怪的是,当我添加 created 时, subscribeddisposed时间到 Start它确实有效的方法。这一切都很好,但我真的需要 AdvanceBy 功能。我的实际测试用例更复杂,需要对可观察的输入进行手动计时。

var scheduler = new TestScheduler();
var source = Observable
.Return("Winner!", scheduler)
.Delay(TimeSpan.FromSeconds(1), scheduler);
var output = scheduler.Start(() => source,
0,
0,
TimeSpan.FromSeconds(5).Ticks);

Assert.Equal(2, output.Messages.Count);

最佳答案

我从来没有用过Start你正在使用的方法。从来没有想过它应该如何或为什么工作。

这应该有效:

var scheduler = new TestScheduler();
var input = new Subject<bool>();

var observable = Observable.Return("feed me")
.Delay(TimeSpan.FromSeconds(1), scheduler);

var observer = scheduler.CreateObserver<string>();
observable.Subscribe(observer);

scheduler.AdvanceBy(1);
Assert.Equal(0, observer.Messages.Count);

// Expecting an OnNext and an OnCompleted notification
scheduler.AdvanceBy(TimeSpan.FromSeconds(2).Ticks);
Assert.Equal(2, observer.Messages.Count);

关于unit-testing - Rx TestScheduler 在 Return 和 Delay 中表现不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46774414/

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