VS Code使用OmniSharp时NUnit单元测试未被识别无法运行
NUnit单元测试未被OmniSharp识别、0用例执行的排查方案
核心代码问题(当前示例代码直接存在的问题)
- 测试类、测试方法缺少
public访问修饰符:NUnit测试发现器默认仅扫描公共类、公共方法标记的测试用例,当前代码里Test类、calcualteBasket方法均使用默认的internal访问级别,会被测试扫描器直接忽略。 - (兼容性补充)旧版本NUnit要求测试类必须添加
[TestFixture]特性标记,缺少该标记也会导致识别失败,高版本NUnit虽已支持自动识别带测试方法的公共类,但加上该标记可以避免跨版本兼容问题。
修正后的可识别测试代码参考:
using NUnit.Framework; [TestFixture] public class Test { [SetUp] public void Init() {} [Test] public void CalculateBasket() { Package package = new Package(7, 7, 7); Package package2 = new Package(20, 20, 20); Basket basket = new Basket(); basket.packages.Add(package); basket.packages.Add(package2); var finalPrice = package.Price + package2.Price; Assert.AreEqual(12, finalPrice); } }
环境配置类排查点
如果修正代码后仍无法识别,按以下顺序检查:
- 确认测试项目已安装全部必要依赖:必须同时安装
NUnit、NUnit3TestAdapter、Microsoft.NET.Test.Sdk三个NuGet包,且三个包的版本不存在兼容冲突,仅安装NUnit本体无法被测试运行器识别。 - 检查项目生成配置:确认测试项目在当前解决方案配置下处于「生成」勾选状态,未被排除在生成流程外;同时确认项目目标框架与安装的NUnit相关包版本适配,比如高版本.NET SDK搭配过旧的NUnit3TestAdapter会出现识别异常。
- 清理缓存重启服务:在VS Code中按下
Ctrl+Shift+P(macOS为Cmd+Shift+P)调出命令面板,依次执行.NET: Clean Test Cache、OmniSharp: Restart OmniSharp,等待OmniSharp重新加载项目完成后,再重新生成项目刷新测试列表。
内容的提问来源于stack exchange,提问作者simonfkings
相关产品推荐
相关产品推荐

