我想对执行异步操作的方法进行单元测试:
Task.Factory.StartNew(() =>
{
// method to test and return value
var result = LongRunningOperation();
});
我在单元测试(用 c# 编写)中存根必要的方法等,但问题是在断言测试之前异步操作尚未完成。
我该如何解决这个问题?我应该创建 TaskFactory 的模拟还是任何其他提示来对异步操作进行单元测试?
你必须有某种方法来伪造任务的创建。
如果您移动了Task.Factory.StartNew
调用一些依赖项(ILongRunningOperationStarter
)那么你可以创建一个使用的替代实现TaskCompletionSource
创建完全按照您希望的方式完成的任务。
它可能会有点毛茸茸的,但它can做完了。我在博客上谈到了这一点 https://codeblog.jonskeet.uk/2011/11/25/eduasync-part-17-unit-testing/不久前 - 对一种方法进行单元测试received任务开始,这当然让事情变得更容易。这是在 C# 5 中的 async/await 上下文中,但适用相同的原则。
如果您不想伪造整个任务创建过程,您可以替换任务工厂,并以这种方式控制时间 - 但老实说,我怀疑这会更加棘手。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)