在使用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()));
这样就可以确定执行异步执行路径.