用途:帮助用户编写、修复、更新或现代化现有 MSTest 测试,并解释 MSTest 断言 API、数据驱动模式与测试生命周期。适用于替换 Assert.IsTrue 为更具体的断言、修正 Assert.AreEqual 参数顺序、将 DynamicData 从 IEnumerable<object[]> 改为 ValueTuple、修复 MSTest 分析器诊断等。不适用于测试质量审计、运行测试、MSTest v1/v2 到 v3 或 v3 到 v4 迁移、CI/CD 配置,以及 xUnit、NUnit、TUnit。
主要能力:先确定项目 MSTest 版本与项目系统,再按版本选择 API。例如 Assert.ThrowsExactly、统一 Assert.Contains/HasCount/IsEmpty/IsNotEmpty 需 3.8+;Assert.IsGreaterThan、IsLessThan、IsInRange、StartsWith、EndsWith、MatchesRegex 需 3.10+;ValueTuple DynamicData 需 3.7+;构造函数注入 TestContext 需 3.6+。低版本应回退到 Assert.ThrowsException、CollectionAssert、StringAssert 或 Assert.IsTrue。
使用方式:检查测试项目、packages.config 与 HintPath 确定版本;遵循 sealed 测试类、[TestClass]/[TestMethod]、AAA 模式与 MethodName_Scenario_ExpectedBehavior 命名;比较断言保持期望值在前、实际值在后;异常测试用 lambda 包裹并区分 ThrowsExactly 与 Throws;数据驱动可用 DataRow 或 DynamicData。
限制:不得升级 MSTest 或项目格式,除非用户明确要求迁移;仓库内 .agents/skill-overlays/dotnet-test/writing-mstest-tests.md 若存在且 frontmatter 匹配,应优先应用其约定;缺失或冲突时报告并回退到通用指导。具体版本行为与更多细节以官方资料为准。