Visual Studio 2017测试运行器可发现测试但无法执行该如何解决?
排查方向与解决办法
这种情况我之前也碰到过好几次,大概率是VS默认测试运行器的配置、项目缓存或者依赖出了问题,给你列几个实用的排查步骤:
1. 确认测试项目的目标框架与VS组件兼容性
VS自带的VSTest运行器对目标框架的支持有严格要求,比如你的测试项目用了.NET 6+,但VS的对应.NET开发组件没更新,就会出现「能发现测试但跑不起来」的情况:
- 右键测试项目 → 属性,确认目标框架版本;
- 打开「工具→获取工具和功能」,检查对应版本的.NET开发组件是否安装完整。
2. 清理项目缓存与重建
项目的二进制文件或测试缓存损坏是常见诱因,Resharper有独立的缓存机制所以不受影响:
- 执行
Clean Solution,再执行Rebuild Solution; - 手动删除测试项目下的
bin和obj文件夹,重新编译; - 清空VS测试会话缓存:点击「测试→测试设置→清空测试会话」。
3. 检查测试类/方法的访问修饰符
默认测试框架对访问权限要求很严格,Resharper则会放宽限制:
- 确保测试类是
public class,测试方法是public void(异步测试要改成public async Task); - 确认测试方法上的特性(比如
[Test]/[Fact])引用了正确的命名空间(比如Microsoft.VisualStudio.TestTools.UnitTesting)。
4. 校验测试项目的NuGet依赖
如果缺失或版本不匹配核心测试包,VSTest会静默跳过执行:
- 检查测试项目的NuGet包,确保
Microsoft.NET.Test.Sdk、MSTest.TestAdapter、MSTest.TestFramework(或你用的xUnit/NUnit对应包)都已正确安装,且版本一致; - 若引用了其他项目,确认被引用项目是类库类型,且已正常编译。
5. 调整测试运行器的基础设置
有时候架构不匹配或并行执行会导致冲突:
- 打开「测试→测试设置→默认处理器架构」,确认选择的架构(x86/x64)和测试项目的目标平台一致;
- 到「工具→选项→测试→通用」,暂时关闭「启用测试发现和执行的并行化」试试。
6. 排查异步测试的写法问题
VSTest对异步void方法的支持极差,会直接跳过执行:
- 把
public void MyAsyncTest()改成public async Task MyAsyncTest(),确保异步测试正确返回Task类型。
内容的提问来源于stack exchange,提问作者killyosaur
相关产品推荐
相关产品推荐

