单元测试async void MVC控制器方法不要运行
本文关键字:运行 方法 控制器 async void MVC 单元测试 | 更新日期: 2023-09-27 18:15:26
我试图测试userController通过其服务获得异步用户,做测试方法无效。问题是所有东西都编译好了,但是测试没有运行。
[TestClass]
public class UserControllerTests
{
[TestMethod]
public async void UserController_GetAll_Returns_Not_Null()
{
var result = await controller.GetALL();
Assert.IsNotNull(result);
}
}
我在"Alexander's Embedded Techwire"中找到了答案,这里的链接只是为异步任务更改async void。
" async void "方法是"即发即忘"的方法,可能永远不会回来,这在需要从方法收集结果和断言的测试环境中是没有意义的。
[TestClass]
public class UserControllerTests
{
[TestMethod]
public async Task UserController_GetAll_Returns_Not_Null()
{
var result = await controller.GetALL();
Assert.IsNotNull(result);
}
}
如果您仔细查看您的输出窗口,在"test detection"(或者不管它叫什么)下,您将看到MSTest给您警告UTA007。
相反,xUnit默认支持它们,而Fixie会检测它们并显式地使它们失败。
正如您所发现的,最好的解决方案是将异常的async void
改为更自然的async Task
。async Task
适用于所有现代单元测试框架。
在我的幻灯片中有关于异步单元测试的更多细节,我在今年的那个会议上做了一个关于这个主题的演讲。