从零实现增量源生成器 · 第 14 / 17 篇

编译级测试,为什么比字符串对比更重要

生成器测试不能只做文本断言,更关键的是验证生成结果是否能编译、诊断是否准确、边界是否被稳稳拦住。

生成器测试最危险的误区,是只对一段输出字符串做断言。这样做当然有价值,但远远不够。

真正需要守住的是编译级行为:

  • 该生成时是否真的生成
  • 不该生成时是否真的拦住
  • 诊断编号、位置和数量是否正确
  • 生成后的代码是否仍然可编译

为什么编译级验证是硬要求

因为生成器本质上工作在编译流程里。你如果只比对文本,却不验证编译结果,就可能出现“文本看起来差不多,实际行为已经变了”的情况。

尤其是这些变化最容易漏:

  • 可空处理退化
  • 泛型约束丢失
  • 嵌套类型结构被打平
  • 诊断没有按预期报出

当前主线测试应该覆盖什么

至少要覆盖:

  • 正常类型生成成功
  • partial 类型被拒绝
  • 静态类型被拒绝
  • 已定义 ToString 的类型被拒绝
  • 嵌套外层不是 partial 时被拒绝

测试不是教程的尾声,而是主线能力的一部分。没有编译级测试,生成器的“可维护”只是口头说法。

教程导航

继续阅读

当前文章已经挂到教程顺序中,建议按相邻章节继续。

上一篇 诊断不是附属品,而是生成器契约的一部分 好的生成器不会在非法输入上默默失败,而是会明确告诉调用方为什么不能生成。 下一篇 调试增量源生成器时,先看哪里 排错不要一上来盯着字符串渲染,先按入口、发现、模型、诊断、输出文件这条顺序查。
查看系列目录 查看全部文章

标签

分类