用途:仅在项目包含 xUnit 包或源码且用户希望改用 MSTest 时使用,将 xUnit.net v2/v3 测试转换为 MSTest v4,不改变目标框架和测试平台,要求构建成功、发现的测试一致、保持通过/失败与执行语义。若项目已是 MSTest 且无 xUnit 测试,应报告无需迁移。不要与目标框架升级或 VSTest/MTP 迁移同时进行。
主要能力:替换 xUnit 相关包为 MSTest v4 元包(示例 pin:<PackageReference Include="MSTest" Version="4.1.0" />);完成机械改写([Fact]→[TestMethod]、[Theory]+[InlineData]→[TestMethod]+[DataRow]、[MemberData]→[DynamicData]、[Trait]→[TestCategory]/[Owner]/[TestProperty]、Assert 系列对应改写等);处理高风险语义映射,如 Assert.Throws<T>→Assert.ThrowsExactly<T>、Assert.ThrowsAny<T>→Assert.Throws<T>、序列相等用 Assert.AreSequenceEqual 等;保留夹具生命周期与并行化行为,如 IClassFixture 映射为静态 [ClassInitialize]/[ClassCleanup]、ITestOutputHelper→TestContext.WriteLine、必要时添加 [assembly: Parallelize(Workers = 0, Scope = ExecutionScope.ClassLevel)]。
使用方式:先做一次批量发现读取项目与配置文件并盘点高风险构造,记录源版本与平台、目标框架;然后替换包并一次性执行编辑;用与基线相同的平台、过滤器和配置运行一次 dotnet test,对比发现/通过/失败/跳过数量;最后按“已变更/已验证/已保留/遗留”给出简洁结果。
限制:MSTest v4 要求 .NET 8+ 或 .NET Framework 4.6.2+,不支持时须先停止;无 MSTest 等价项的断言(如 Assert.Collection、Assert.All、Assert.Equivalent、Record.Exception、事件断言)需手动改写,不得直接删除;[Ignore]、[Timeout] 须保留 [TestMethod];MTP 场景优先用 MSTest.Sdk 或设置 EnableMSTestRunner=true 与 OutputType=Exe。其他细节资料暂未提供。