我如何对这种(正确)抛出异常的异步方法进行单元测试?我在界面中有以下方法..TaskSearchAsync(TUsearchOptions);效果很好。现在我正在尝试进行单元测试以测试何时出现问题-并且代码抛出异常。在这种情况下,我将我的方法设置为抛出HttpRequestException。我的单元测试失败说我抛出了那个异常..varresult=Should.Throw(async()=>awaitservice.SearchAsync(searchOptions));来自单元测试的错误消息是Shouldly.ChuckedAWobblyvarresult=ShouldbethrownSystem.Net.Http.HttpRequestException但断言框架不是这样说的:你期望有一个异常,但没有被抛出。当我单步执行代码时,100%抛出异常。任何人都可以看到我的单元测试代码有什么问题吗?问题是您的断言框架不知道异步方法。我建议你问一个问题。同时,您可以使用Should.Throw的源代码编写自己的MyShould.ThrowAsync:}catch(TExceptione){返回e;}catch(Exceptione){thrownewChuckedAWobbly(newShouldlyMessage(typeof(TException),e.GetType()).ToString());}thrownewChuckedAWobbly(newShouldlyMessage(typeof(TException)).ToString());}并使用它:varresult=awaitMyShould.ThrowAsync(async()=>awaitservice.SearchAsync(searchOptions));或稍微简单和等效:varresult=awaitMyShould.ThrowAsync(()=>service.SearchAsync(searchOptions));单元测试异步代码/功能非常困难。我正在对自己进行异步单元测试,遇到了与您相同的问题。我发现以下两个资源非常有用:问题是传递的lambda返回一个任务。抛出的异常只能被Should.Throw观察到,如果它等待这个完成,显然它不会。作为解决方法,您可以等待SearchAsync返回的任务。mstest(内置的visualstudio测试框架)自VisualStudio2012起支持异步测试。您基本上只需通过将“void”替换为“asyncTask”来更改测试方法声明。[测试方法][ExpectedException(typeof(System.Net.Http.HttpRequestException))]publicasyncTaskSomeTest(){awaitservice.SearchAsync(searchOptions);您可能正在使用不同的单元测试框架,但不清楚是哪一个。查阅其文档以查看它是否支持异步测试。NUnit2.6.3似乎也支持异步测试。编辑:所以你正在使用xUnit。xUnit2.0修复了这个特殊问题。它目前仍处于alpha阶段。异常在与运行单元测试的线程不同的线程上抛出。一个单元测试框架只能在它自己的线程上预测异常。我建议您在服务的同步版本上测试异常。像这样测试:varresult=Should.Throw(()=>service.SearchAsync(searchOptions).Result);或者:varresult=Should.Throw(()=>service.SearchAsync(searchOptions).Wait());否则,您的Should.Throw在异步lambda完成之前返回。以上是C#学习教程:HowdoIunittestingthiskindofasynchronousmethodthat(correctly)throwsexceptions?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: