我可以使用什么技术来模拟与TaskFactory.FromAsync()的交互?
本文关键字:FromAsync 交互 TaskFactory 可以使 什么 技术 模拟 我可以 | 更新日期: 2023-09-27 18:14:59
我正在尝试单元测试我的应用程序和异步HttpWebRequest
方法的交互,我想知道如何模拟异步回调的调用。例如,考虑以下代码:
Task.Factory
.FromAsync<Stream>(wr.BeginGetRequestStream, wr.EndGetRequestStream, null)
.ContinueWith(SomeDelegate);
在这种情况下,wr
是一个对象,本质上包装HttpWebRequest。我可以在单元测试中存根并设置对该对象的期望,但我想不出一种方法来创建否则会调用EndRequestStream
的信号。如果没有这个信号,单元测试将无限期地阻塞,等待任务完成,这是永远不会发生的。
我可以为Task
和TaskFactory
创建接口和代理,然后在该级别设置期望,但我希望有一些较少涉及的东西。
您可以更改wr
的类型以暴露返回Task<Stream>
的GetRequestAsync
方法吗?这样,您就可以模拟它,以便它从TaskCompletionSource
返回一个任务,您可以在测试中执行该任务。我自己也用一个类做过类似的事情来测试组合块,效果很好。就可能发生的所有不同的事情而言,编写测试是有趣的,但是它可以工作…
我不确定我的问题是正确的,如果你想模拟事件引发你可以使用以下语法:
// wr should be Mock
// EndRequestStream - event
wr.Raise(x => x.EndRequestStream += null,
this,
new EventArgs(...));
不要忘记把EventArgs
instance放在右边