用途
write-xaml-tests 是 dotnet/maui 仓库中的一个技能,用于为 GitHub issue 创建 XAML 单元测试。这些测试验证 XAML 解析、XamlC 编译(IL 生成)以及源生成(Source Generator)行为。
适用场景
以下情况应使用本技能:
- 测试 XAML 解析/膨胀(inflation)行为
- 测试 XamlC(IL 生成)的正确性
- 测试源生成器(Source Generator)的输出
- XAML 特定缺陷,例如绑定、标记扩展、x:Name 等
以下情况不应使用本技能:
- 测试 UI 交互或视觉行为 → 使用 write-ui-tests 技能
- 测试页面加载后的运行时行为 → 使用 write-ui-tests 技能
- 测试平台特定渲染 → 使用 write-ui-tests 技能
所需输入
调用前需确保具备:
- issue 编号(例如 12345)
- issue 描述——说明哪个 XAML 行为出现异常
- 预期行为与实际行为
工作流
第 1 步:阅读 XAML 单元测试指南
cat .github/instructions/xaml-unittests.instructions.md
该文件包含以下方面的权威约定:
- 文件命名(MauiXXXXX.xaml 和 MauiXXXXX.xaml.cs)
- 文件位置(src/Controls/tests/Xaml.UnitTests/Issues/)
- 使用 [Values] XamlInflator 的测试模式
- 使用 MockCompiler 进行 XamlC 测试
- 使用 MockSourceGenerator 进行源生成器测试
- 用于无效代码生成的特殊文件扩展名(.rt.xaml、.rtsg.xaml、.rtxc.xaml)
第 2 步:创建测试文件
按照第 1 步的约定创建:
- src/Controls/tests/Xaml.UnitTests/Issues/MauiXXXXX.xaml
- src/Controls/tests/Xaml.UnitTests/Issues/MauiXXXXX.xaml.cs
第 3 步:验证测试可编译并运行
# Build the test project
dotnet build src/Controls/tests/Xaml.UnitTests/Controls.Xaml.UnitTests.csproj -c Debug --no-restore -v q
# Run specific test
dotnet test src/Controls/tests/Xaml.UnitTests/Controls.Xaml.UnitTests.csproj --filter "FullyQualifiedName~MauiXXXXX" --no-build
第 4 步:验证测试行为
- 缺陷复现测试:修复前测试应失败,修复后应通过
- 回归测试:测试应通过以确认行为正常
输出
完成后报告:
✅ XAML unit test created for Issue #XXXXX
**Files:**
- `src/Controls/tests/Xaml.UnitTests/Issues/MauiXXXXX.xaml`
- `src/Controls/tests/Xaml.UnitTests/Issues/MauiXXXXX.xaml.cs`
**Test method:** `DescriptiveTestName`
**Inflators tested:** Runtime, XamlC, SourceGen
**Verification:** Tests [PASS/FAIL] as expected
参考资料
- 完整约定:.github/instructions/xaml-unittests.instructions.md
- 测试项目:src/Controls/tests/Xaml.UnitTests/
- 现有 issue 测试:src/Controls/tests/Xaml.UnitTests/Issues/
限制
本技能仅用于 XAML 解析、XamlC 编译和源生成相关的单元测试,不覆盖 UI 交互、视觉行为、页面加载后的运行时行为以及平台特定渲染。