我正在尝试对我的应用程序和异步HttpWebRequest
方法的交互进行单元测试,并且想知道如何模拟异步回调的调用。例如,请考虑以下代码:
Task.Factory
.FromAsync<Stream>(wr.BeginGetRequestStream, wr.EndGetRequestStream, null)
.ContinueWith(SomeDelegate);
在这种情况下,wr
是一个基本上包装HttpWebRequest的对象。我可以在单元测试中存根并设置对该对象的期望,但我想不出一种创建信号的方法,否则会调用EndRequestStream
。没有这个信号,单元测试会无限期地等待任务完成,这将永远不会发生。
我可以为Task
和TaskFactory
创建接口和代理,然后在该级别设置期望值,但我希望不会涉及更少的内容。
答案 0 :(得分:2)
您是否可以更改wr
的类型以公开返回GetRequestAsync
的{{1}}方法?这样你就可以模拟它,以便从Task<Stream>
返回一个你可以在你的测试中产生的任务。我自己做了类似的事情来测试一个组合块,它运行良好。根据可能发生的所有不同事情,编写测试很有意思,但它有效......
答案 1 :(得分:0)
我不确定我是否正确,如果你想模拟事件提升你可以使用以下语法:
// wr should be Mock
// EndRequestStream - event
wr.Raise(x => x.EndRequestStream += null,
this,
new EventArgs(...));
不要忘记放右EventArgs
个实例。