我已将问题分解为一个例子。 处理器执行异步操作并通过Rx observable发布结果。
public class Tests
{
[Test]
public async Task Receiving_an_async_result_should_succeed()
{
var p = new Processor();
p.Process("message");
var res = await p.Results;
res.Should().NotBeNullOrEmpty();
}
}
public class Processor
{
private readonly ReplaySubject<string> _subject = new ReplaySubject<string>();
public async void Process(string message)
{
try
{
// Fake some async processing here!
var r = await Task.Factory.StartNew(() => message.Reverse().ToString());
_subject.OnNext(r);
}
catch (Exception e)
{
_subject.OnError(e);
}
}
public IObservable<string> Results { get { return _subject; } }
}
这里的问题是我不知道如何正确设置测试用例。似乎等待的结果永远不会到来!
答案 0 :(得分:2)
结果是IObservable<T>
- 因此,在发送OnCompleted()
之前,结果尚未完成。这就是为什么你的等待没有回来。
我怀疑你想要等待第一个结果(看起来你打算反复调用Process
) - 所以如果你改变这一行:
var res = await p.Results;
对此:
var res = await p.Results.Take(1);
你会有更多的运气。