c# – 模拟异步任务

在使用Microsoft BCL的.NET 4.0上使用Moq进行单元测试时,我有以下情况
Task<MyClass> mockTask = new Task<MyClass>(() => new MyClass());

uploadHelper.Setup().Returns(mockTask);

Task.WaitAll(mockTask);

我面临的问题是Task.WaitAll(mockTask)只是阻止并且永远不会返回.

在这里做错了什么?

编辑
请注意,mockTask在我的上下文中是异步的.

解决方法

提出的解决方案有一个问题 – 任务可能会在时间结束时返回被调用.
这意味着您的单元测试表现出与您的真实代码不同的异步语义.那是你要的吗?

如果您真的想要捕获测试代码的异步性质,则不能使用带有值的Returns方法.

而是使用接受函数的Returns重载.这样的事情

uploadHelper.Setup().Returns(() => Task.Run(() => new MyClass()));

这样就可以确定执行异步执行路径.

相关文章

原文地址:http://msdn.microsoft.com/en-us/magazine/cc163...
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采...
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下...
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Mic...
c语言输入成绩怎么判断等级
字符型数据在内存中的存储形式是什么