为何Visual Studio会终止返回void而非Task的异步测试方法?
为何返回void的异步测试在Visual Studio 17.14.0中不被识别?
这不是Visual Studio的错误,而是测试框架(MSTest)的设计规范要求。
核心原因:
- MSTest等主流.NET测试框架对异步测试的签名有明确要求:异步测试方法必须返回
Task(无返回值)或Task<T>(有返回值),这样框架才能正确跟踪异步操作的完成状态,等待测试逻辑执行完毕后再统计结果。 async void的方法签名不符合测试框架的识别规则,会被Test Explorer忽略;同时在运行时,框架无法等待异步逻辑完成,直接终止测试流程,导致你看到的"0 Tests run"结果。
为什么async void不能用于测试?
async void原本是为UI事件处理器设计的,这类场景不需要外部调用者等待执行完成。但在测试场景中:
- 测试框架无法捕获
async void方法中的异常(异常会直接抛到线程池,可能导致程序崩溃或测试无响应); - 框架无法判断异步逻辑何时结束,会提前结束测试进程,导致测试逻辑未执行完全就被终止。
正确的异步测试写法:
将返回类型改为Task即可,这是符合测试框架规范的标准写法:
[TestMethod] [DoNotParallelize] public async Task ComponentDrawingAspectParserTest() { // 测试逻辑 }
内容的提问来源于stack exchange,提问作者Marťas
相关产品推荐
相关产品推荐

