我想对一个执行异步操作的方法进行单元测试:
Task.Factory.StartNew(() =>
{
// method to test and return value
var result = LongRunningOperation();
});
我在我的单元测试(用 c# 编写)中 stub 了必要的方法等,但问题是在我断言测试之前异步操作没有完成。
我该如何解决这个问题?我应该创建 TaskFactory 的模拟或任何其他技巧来对异步操作进行单元测试吗?
最佳答案
您必须有某种方法来伪造任务创建。
如果您将 Task.Factory.StartNew
调用移动到某个依赖项 (ILongRunningOperationStarter
),那么您可以创建一个使用 TaskCompletionSource
的替代实现创建可以准确完成您希望的任务的任务。
它可能有点麻烦,但可以完成。我 blogged about this不久前 - 单元测试一种方法,该方法接收 任务开始,这当然使事情变得更容易。它位于 C# 5 中的异步/等待上下文中,但适用相同的原则。
如果您不想伪造整个任务创建过程,您可以替换任务工厂,并以这种方式控制时间 - 但老实说,我怀疑这会更麻烦。
关于c# - 单元测试异步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10556350/