C#使用moq从异步方法中抛出异常

Sam*_*Sam 4 c# asynchronous moq

我使用Moq库作为与nunit一起的模拟框架.我无法弄清楚如何设置我的模拟对象从返回任务的异步方法抛出异常.

任何帮助表示赞赏

Jon*_*eet 6

异步方法通常不直接抛出异常 - 它们返回最终出现故障的任务.创建此类任务的最简单方法是使用Task.FromException.

你没有在你的问题中提供很多细节,但我怀疑你是否只是让你的模拟返回Task.FromException你想要的异常结果,这将适当地模拟错误.唯一的缺点是任务将立即出现故障,这只会测试等待它的任何事物的"快速路径" - 它不会测试仅在以后抛出异常的情况.为此,您可以编写自己的小异步辅助方法:

// Create a non-generic one if you want, too
private static async Task<T> DelayFaultedTask(Exception e)
{
    await Task.Yield();
    throw e;
}
Run Code Online (Sandbox Code Playgroud)

然后调用它来获取从模拟返回的"延迟故障"任务.