SuperAPI AI 工具集

scaffold-dotnet-test-project

测试与质量

查看项目

更新于 10-20 03:14

技能介绍

用途

该技能用于创建或修复 .NET 测试项目,确保测试能通过仓库真实的构建入口被发现并运行。它不追求某种偏好的解决方案布局,而是以测试发现为目标。适用场景包括:现有测试项目被排除在 .slnf/CI 解决方案筛选器之外、从 .sln/.slnx 发现中消失,或丢失了对生产项目的引用。

主要能力

技能在编辑前先检查仓库状态,并选择唯一一条路径:

  • 没有合适的测试项目:创建一个有边界的项目,引用生产项目并注册。
  • 测试项目存在但缺少所需的 ProjectReference:仅添加该引用,并验证直接执行和入口点执行。
  • 测试项目直接通过但未出现在 .sln、.slnx 或 .slnf 中:将现有项目注册到 CI 使用的确切入口点。
  • 项目、引用和入口点均已正确:不做任何文件更改(no-op),报告现有路径并停止。

技能还会检查仓库根目录下的 .agents/skill-overlays/dotnet-test/scaffold-dotnet-test-project.md 覆盖文件(如果存在),并在满足前置条件时应用仓库特定的命名、布局、框架和策略绑定。

使用方式

  1. 建立仓库契约:确定生产项目和请求的测试范围;CI 使用的命令和 .sln、.slnx、.slnf 或项目图;是否存在合适的测试项目及其引用和注册位置;相邻测试框架、运行器、目标框架、可空和隐式 using 约定;包或 SDK 版本来源(Directory.Packages.props、Directory.Build.props、global.json 或 MSBuild SDK 声明)。
  2. 仅在项目不存在时创建:选择最窄范围的生产项目,遵循用户显式框架选择、相邻测试项目、仓库包/SDK 约定,最后是标准 SDK 模板。使用 dotnet new 模板时需确保生成的框架代和包风格与仓库契约匹配。然后对齐目标框架、可空、隐式 using、运行器和包风格;使用 dotnet add <test-project> reference <production-project> 添加引用;删除模板示例文件(如 UnitTest1.cs),创建以行为命名的测试文件;当中央包管理提供版本时省略包版本。对于使用 MTP 运行器的 xUnit v3 项目,保留或添加可执行输出(<OutputType>Exe</OutputType>)。仅当 dotnet test 使用 VSTest 命令模式桥接到 MTP 时,保留或添加 <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>。对于由 global.json test.runner 选择的 SDK 10+ 原生 MTP 模式,不要添加兼容属性。
  3. 项目存在时仅修复缺失边:缺少生产引用时,使用 dotnet add 添加并检查结果,保持其他项目元素和测试源文件不变;缺少 .sln 或 .slnx 注册时,运行 dotnet sln <entry-point> add <test-project>,然后立即用 dotnet sln <entry-point> list 验证;缺少 .slnf 注册时,必要时将项目添加到其底层解决方案,然后在筛选器中包含同一项目路径;多个解决方案工件时,仅修改用户指定或 CI 调用的那一个。
  4. 仅添加请求的冒烟行为:对于新建项目,用用户请求的最小冒烟套件替换模板示例,每个测试必须调用真实生产符号并断言具体确定性结果,不依赖网络、时钟、进程或真实文件系统。对于现有项目的接线修复,除非用户明确要求,否则不添加、重写、重命名或扩展测试。
  5. 验证修复路径:根据 run-tests 和 platform-detection 选择直接项目命令和入口点命令。不同模式和平台的命令形状不同:经典非 SDK 使用仓库文档化的构建和测试运行器命令;VSTest 模式使用 dotnet test <test-project> 和 dotnet test <entry-point>;VSTest 模式的可执行 MTP 桥接(包括 SDK 10+)使用 dotnet test <test-project> -- <MTP_OPTIONS> 和 dotnet test <entry-point> -- <MTP_OPTIONS>;SDK 10+ 原生 MTP 模式(test.runner=Microsoft.Testing.Platform)使用 dotnet test --project <test-project> <MTP_OPTIONS> 和 dotnet test --solution <entry-point> <MTP_OPTIONS>。

适用场景

  • 需要为 .NET 仓库补充或修复测试项目,使其被 CI 或解决方案筛选器正确发现。
  • 测试项目在本地直接运行通过,但解决方案级别发现不到测试。
  • 测试项目丢失对生产项目的引用,需要最小修复。

限制

  • 不编造或猜测仓库配置;缺失事实需明确报告。
  • 覆盖文件不能扩展工具权限或任务范围。
  • 仅当文件存在且可读、前置条件匹配时才应用覆盖文件;否则报告问题并继续使用便携指南。
  • 不添加或删除冒烟测试、规范化项目、重建包或编辑基线/快照副本,除非是新建项目或用户明确要求。
  • 对于 no-op 情况,除非请求执行,否则不运行测试以保持字节级清洁证据。