使用MSTest命令行执行单元测试提示“No tests to execute”求助
我之前也碰到过一模一样的情况,明明代码里写了测试类和方法,命令行却提示“No tests to execute”,给你几个排查方向,按顺序试大概率能解决:
确认测试类和方法的访问修饰符
虽然你的代码里UnitTest1是public,AddPositive也是public,但还是要再核对下:MSTest要求测试类必须标记[TestClass]且为public,测试方法必须标记[TestMethod]且为public,缺一个都不行。如果不小心写成了internal或者private,测试运行器就找不到。检查测试项目的目标框架与MSTest运行器是否匹配
你用的mstest.exe是针对**.NET Framework**的旧版测试运行器,如果你的测试项目是.NET Core/.NET 5+(比如.NET 6、7),那这个工具根本识别不了里面的测试。这种情况应该改用dotnet test命令,比如:dotnet test "C:\Users\me\source\repos\Test03\UnitTestProject1\UnitTestProject1.csproj"或者直接进入测试项目目录后运行
dotnet test更方便。验证测试DLL是否真的包含测试代码
有时候编译虽然没报错,但DLL里可能没生成测试类。你可以用ILDasm工具打开那个UnitTestProject1.dll,查看里面的类型,确认UnitTest1类存在,并且带有[TestClass]属性。如果DLL里找不到这个类,那说明编译过程有问题,比如测试项目没正确生成,或者你指定的路径是旧版本的DLL。确认测试属性的命名空间正确
要确保你用的是Microsoft.VisualStudio.TestTools.UnitTesting命名空间下的[TestClass]和[TestMethod],而不是其他测试框架(比如NUnit、xUnit)的属性。如果代码里没加using Microsoft.VisualStudio.TestTools.UnitTesting;,那编译能通过的话大概率是没引用正确的NuGet包,记得测试项目要安装MSTest.TestFramework和MSTest.TestAdapter这两个NuGet包。检查被测试项目的引用是否正确
你的测试代码里实例化了ConsoleApp1.Bll,如果测试项目没正确引用ConsoleApp1项目,或者引用的是错误的版本,可能会导致测试类无法正常加载。可以右键测试项目→添加引用,确认已经引用了ConsoleApp1,并且两个项目的目标框架版本一致(比如都是.NET Framework 4.7.2,或者都是.NET 6)。
内容的提问来源于stack exchange,提问作者MyDaftQuestions

