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

发布时间:2026/9/2 12:55:47

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),仅供参考

相关新闻

把 Windows 11 改回 Windows 10 的样子:ExplorerPatcher 快速上手

把 Windows 11 改回 Windows 10 的样子:ExplorerPatcher 快速上手

2026/9/2 12:45:46

把 Windows 11 改回 Windows 10 的样子:ExplorerPatcher 快速上手 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 如果你刚把系统换…

prompt-optimizer 完整实操:3 个提示词优化插件,从右键优化网页文字到接入自己的大模型

prompt-optimizer 完整实操:3 个提示词优化插件,从右键优化网页文字到接入自己的大模型

2026/9/2 12:45:46

prompt-optimizer 完整实操:3 个提示词优化插件,从右键优化网页文字到接入自己的大模型 【免费下载链接】prompt-optimizer An AI prompt optimizer for writing better prompts and getting better AI results. 项目地址: https://gitcode.com/GitHub…

3分钟搞定Windows启动U盘:Rufus USB格式化工具完全指南

3分钟搞定Windows启动U盘:Rufus USB格式化工具完全指南

2026/9/2 12:45:46

3分钟搞定Windows启动U盘:Rufus USB格式化工具完全指南 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 插U盘之前,你得先去官网找下载页、手动比对哈希值,再打…

用5分钟跑通tinygrad:能读懂的深度学习框架全拆解

用5分钟跑通tinygrad:能读懂的深度学习框架全拆解

2026/9/2 13:55:49

用5分钟跑通tinygrad:能读懂的深度学习框架全拆解 【免费下载链接】tinygrad You like pytorch? You like micrograd? You love tinygrad! ❤️ 项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygrad 如果你想学深度学习,但一想到几百…

14 种扫描一次搞定:Czkawka 免费重复文件查找与磁盘清理工具上手指南

14 种扫描一次搞定:Czkawka 免费重复文件查找与磁盘清理工具上手指南

2026/9/2 13:55:49

14 种扫描一次搞定:Czkawka 免费重复文件查找与磁盘清理工具上手指南 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka Czkawka 是一款免…

go-zero 服务治理实战:熔断、限流与降级,3 个拦截器挡住 90% 的雪崩

go-zero 服务治理实战:熔断、限流与降级,3 个拦截器挡住 90% 的雪崩

2026/9/2 13:55:49

go-zero 服务治理实战:熔断、限流与降级,3 个拦截器挡住 90% 的雪崩 【免费下载链接】go-zero A cloud-native Go microservices framework with cli tool for productivity. 项目地址: https://gitcode.com/GitHub_Trending/go/go-zero 上游接口…

从源码到二进制:编译器优化、动态链接与TOCTOU漏洞如何改变程序行为

从源码到二进制:编译器优化、动态链接与TOCTOU漏洞如何改变程序行为

2026/9/2 13:55:49

在开发过程中,你是否遇到过这样的困惑:明明自己编写的代码逻辑清晰,但编译后生成的可执行程序(binary)运行起来,却产生了意料之外的结果?或者,在调试一个看似简单的程序时&#xff0…

开源DocSift:基于RAG的长文档智能检索方案,优化LLM上下文成本

开源DocSift:基于RAG的长文档智能检索方案,优化LLM上下文成本

2026/9/2 13:55:49

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

大厂UI/UX作品集制作思路:从项目筛选到面试表达

大厂UI/UX作品集制作思路:从项目筛选到面试表达

2026/9/2 13:45:49

这次我们来看大厂 UI/UX 作品集的常见思路。很多人做作品集,第一步就打开 Figma 开始排版,做到一半才发现逻辑不顺、项目太水、讲不清楚。问题不是不够努力,而是没有先解决三个核心问题:给谁看、讲什么、怎么证明。这篇加更主要回…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/2 10:08:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/2 12:11:52

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/1 23:49:08

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

2026/9/2 0:04:59

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

2026/9/2 0:04:59

这次我们来看一个很实用的 DeepSeek 落地场景:用 DeepSeek 把英文视频字幕自动翻译成中文。具体案例是《恶魔君》1989 年第 28 集的英转中字幕任务,标题写得很直白,但背后其实是一整套可以复用的技术流程:字幕解析、模型调用、批量…

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

2026/9/2 0:04:59

当你家里摆着一台天猫精灵,却总希望语音助手偶尔“不正经”一点,不用官方腔回答问题,而是张口就接几句搞笑段子,会是什么体验?我最近动手验证了一下这个想法——没有去改装任何市面上现有的智能音箱,而是直…

远程协作的工作台整理

远程协作的工作台整理

2026/9/2 6:21:32

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/2 6:21:32

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/2 2:45:06

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…