ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

dotnet/skills xUnit v2升v3清单:12个关键变更点一次看懂

dotnet/skills xUnit v2升v3清单:12个关键变更点一次看懂 dotnet/skills xUnit v2升v3清单12个关键变更点一次看懂【免费下载链接】skillsRepository for skills to assist AI coding agents with .NET and C#项目地址: https://gitcode.com/GitHub_Trending/skills17/skillsskills17/skills仓库.NET 团队官方维护的 AI 编码智能体技能库提供了一个开箱即用的dotnet-test-migration插件其中migrate-xunit-to-xunit-v3技能可自动完成xUnit.net v2 → v3 升级更新包引用、修复破坏性变更、保证所有测试按迁移前结果通过。下面把官方迁移清单拆解为12 个关键变更点帮你一次看懂 v3 到底改了什么。 先确认你的项目能升吗v3 对运行框架有硬性要求升级前先核对✅.NET 8 及以上或.NET Framework 4.7.2 及以上✅ 测试库项目支持 .NET Standard 2.0✅ 项目为 SDK-style 格式⛔ 如果目标框架低于上述版本官方技能的策略是立即停止迁移并提示先升级目标框架——见 migrate-xunit-to-xunit-v3/SKILL.md 中的 Step 1 与 eval.yaml 里的 detect-incompatible-target-framework 评测用例。提交策略官方要求每个大步骤后提交一次代码且把项目文件改动与代码改动分开提交保证迁移可审查、可二分回滚。 必做的 5 个基础变更点1️⃣ 定位 xUnit v2 测试项目全局搜索以下 7 个 v2 包名注意不要只查.csproj——Directory.Build.props、Directory.Build.targets、Directory.Packages.props中央包管理里也可能声明版本v2 包v3 对应xunitxunit.v3xunit.abstractions直接删除xunit.assertxunit.v3.assertxunit.corexunit.v3.corexunit.extensibility.corexunit.extensibility.execution合并为xunit.v3.extensibility.core二合一xunit.runner.visualstudio升级到最新版2️⃣ 测试项目改为可执行程序v3 的测试项目会生成自带运行器的可执行文件因此每个测试项目需设置OutputTypeExe/OutputType。技巧如果测试项目命名统一如*.Tests.csproj可以集中写在Directory.Build.props里避免逐项目修改。3️⃣ 保持原有测试平台不变迁移前迁移后配置使用 VSTest常见情况Directory.Build.props加IsTestingPlatformApplicationfalse/IsTestingPlatformApplication使用YTest.MTP.XUnit2删除该包改为UseMicrosoftTestingPlatformRunnertrue/UseMicrosoftTestingPlatformRunner4️⃣ 删除using Xunit.Abstractions;v2 中常见的这个 using 在 v3 中不再需要搜索后整体移除即可。5️⃣async void测试方法必须改造v3不再支持async void测试方法会直接编译失败凡是用[Fact]/[Theory]标注的async void方法一律改为async Task。这是最容易踩的坑也是评测中被反复验证的场景。 条件触发的 7 个进阶变更点以下步骤只在你项目里出现对应代码模式时才需要处理6️⃣ 四个常用属性字符串改typeofCollectionBehaviorAttribute、TestCaseOrdererAttribute、TestCollectionOrdererAttribute、TestFrameworkAttribute的构造方式从两个字符串类型全名 程序集名改为传入System.Type即// 旧写法 [assembly: CollectionBehavior(MyNamespace.MyCollectionFactory, MyAssembly)] // 新写法 [assembly: CollectionBehavior(typeof(MyNamespace.MyCollectionFactory))]7️⃣ 自定义 Fact/Theory 特性要补源码信息继承FactAttribute或TheoryAttribute的自定义特性v3 要求构造函数提供[CallerFilePath]和[CallerLineNumber]参数并传给base(...)否则编译器会报错。8️⃣ 自定义 BeforeAfterTest 特性要改签名继承BeforeAfterTestAttribute的特性类Before/After方法签名多了一个IXunitTest参数重写和base调用都要同步更新。9️⃣ 处理新增的 xUnit 分析器警告v3 引入了新的分析器规则最典型的是xUnit1051接收CancellationToken的测试方法应改用TestContext.Current.CancellationToken。 告别Xunit.SkippableFact包该包整体移除对应替换关系[SkippableFact]→[Fact][SkippableTheory]→[Theory]Skip.If(...)→Assert.SkipWhen(...)Skip.IfNot(...)→Assert.SkipUnless(...)1️⃣1️⃣ 同步升级伴生包伴生包版本Xunit.Combinatorial1.x → 最新 2.xXunit.StaFact1.x → 最新 3.x漏掉这两个包是主包升了、编译还是报错的常见原因。1️⃣2️⃣ 构建验证 回归测试最后一步永远是构建解决方案 → 修复残留编译错误 →dotnet test跑全量测试确认结果与迁移前完全一致。仓库为该技能准备了 13 组真实迁移场景的评测与夹具含中央包管理、MTP 项目、SkippableFact 等可在 tests/dotnet-test-migration/migrate-xunit-to-xunit-v3/ 中逐一参考。 让 AI 帮你自动执行迁移这些步骤不必手工敲——dotnet-test-migration插件还带了一个test-migration 编排智能体它能自动检测你的框架、版本和平台VSTest 还是 MTP然后路由到正确的迁移技能并逐步执行技能定义plugins/dotnet-test-migration/skills/migrate-xunit-to-xunit-v3/SKILL.md编排智能体plugins/dotnet-test-migration/agents/test-migration.agent.md插件说明plugins/dotnet-test-migration/README.md 在 Copilot CLI 或 Claude Code 中执行/plugin marketplace add dotnet/skills安装插件后直接说Migrate to xUnit v3即可触发自动迁移智能体会先做兼容性检查不满足条件时会主动停下来告诉你该先做什么。✅ 迁移完成自检清单所有包引用已切换到xunit.v3.*xunit.abstractions已删除测试项目OutputType为Exe测试平台配置正确VSTest 或 MTP与迁移前一致无async void测试方法残留字符串式特性参数已全部改为typeof伴生包Combinatorial / StaFact已升级dotnet test全量通过结果与迁移前一致 按这份清单逐项过一遍v2 升 v3 就不再是玄学升级而是一次可预期、可回滚的版本升级。【免费下载链接】skillsRepository for skills to assist AI coding agents with .NET and C#项目地址: https://gitcode.com/GitHub_Trending/skills17/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表