我可以使用哪些技术来模拟与TaskFactory.FromAsync()的交互?

问题描述 投票:0回答:2

我试图单元测试我的应用程序和异步HttpWebRequest方法的交互,我想知道如何模拟异步回调的调用。例如,请考虑以下代码:

Task.Factory
    .FromAsync<Stream>(wr.BeginGetRequestStream, wr.EndGetRequestStream, null)
    .ContinueWith(SomeDelegate);

在这种情况下,wr是一个基本上包装HttpWebRequest的对象。我可以在单元测试中存根并设置对该对象的期望,但我想不出一种方法来创建否则会调用EndRequestStream的信号。如果没有此信号,单元测试将无限期地等待任务完成,这将永远不会发生。

我可以为TaskTaskFactory创建接口和代理,然后在那个级别设置期望,但我希望有更少的参与。

c# mocking task-parallel-library rhino-mocks
2个回答
2
投票

你能改变wr的类型来暴露一个返回GetRequestAsyncTask<Stream>方法吗?这样你就可以嘲笑它,以便它从TaskCompletionSource中返回一个你可以在测试中产生的任务。我自己做了类似的事情来测试一个组合块,它运行良好。根据可能发生的所有不同事情,编写测试很有意思,但它的工作原理......


0
投票

我不确定我是否正确,如果你想模拟事件提升你可以使用以下语法:

// wr should be Mock
// EndRequestStream  - event
wr.Raise(x => x.EndRequestStream += null, 
              this, 
              new EventArgs(...));

不要忘记把正确的EventArgs实例。

© www.soinside.com 2019 - 2024. All rights reserved.