我试图通过其服务测试userController让用户异步,使测试方法无效。问题是所有事情都会编译,但测试不会运行。
[TestClass]
public class UserControllerTests
{
[TestMethod]
public async void UserController_GetAll_Returns_Not_Null()
{
var result = await controller.GetALL();
Assert.IsNotNull(result);
}
}
答案 0 :(得分:2)
我在"亚历山大的嵌入式Techwire"这里link只是为异步任务更改了异步空白。
“async void”方法是“即发即忘”的方法,可能永远不会回来,这在测试环境中没有意义,你需要从方法中收集结果和断言。
[TestClass]
public class UserControllerTests
{
[TestMethod]
public async Task UserController_GetAll_Returns_Not_Null()
{
var result = await controller.GetALL();
Assert.IsNotNull(result);
}
}
答案 1 :(得分:0)
如果仔细查看输出窗口,在“测试检测”(或其他任何调用)下,您会看到MSTest正在向您发出警告UTA007。
相比之下,xUnit默认支持它们,而Fixie会检测它们并明确地将它们失败。
正如您所发现的,最佳解决方案是将异常async void
更改为更自然async Task
。 async Task
适用于所有现代单元测试框架。
我在slides中有关于异步单元测试的更多详细信息,请参阅我今年在ThatConference上发表的主题。