从零实现增量源生成器 · 第 14 / 17 篇
编译级测试,为什么比字符串对比更重要
生成器测试不能只做文本断言,更关键的是验证生成结果是否能编译、诊断是否准确、边界是否被稳稳拦住。
生成器测试最危险的误区,是只对一段输出字符串做断言。这样做当然有价值,但远远不够。
真正需要守住的是编译级行为:
- 该生成时是否真的生成
- 不该生成时是否真的拦住
- 诊断编号、位置和数量是否正确
- 生成后的代码是否仍然可编译
为什么编译级验证是硬要求
因为生成器本质上工作在编译流程里。你如果只比对文本,却不验证编译结果,就可能出现“文本看起来差不多,实际行为已经变了”的情况。
尤其是这些变化最容易漏:
- 可空处理退化
- 泛型约束丢失
- 嵌套类型结构被打平
- 诊断没有按预期报出
当前主线测试应该覆盖什么
至少要覆盖:
- 正常类型生成成功
- 非
partial类型被拒绝 - 静态类型被拒绝
- 已定义
ToString的类型被拒绝 - 嵌套外层不是
partial时被拒绝
测试不是教程的尾声,而是主线能力的一部分。没有编译级测试,生成器的“可维护”只是口头说法。
教程导航
继续阅读
当前文章已经挂到教程顺序中,建议按相邻章节继续。