SuperAPI AI 工具集

gdi-rendering-tests

测试与质量

查看项目

更新于 10-16 05:06

技能介绍

用途:为 System.Drawing 中现有或新增的绘图 API(Graphics、GraphicsPath、Bitmap、Font 及相关类型)制定单元测试规则。WinForms 控件 API 测试另见 control-api-tests,绘图 API 实现模式另见 using-and-extending-gdi-plus。核心原则是每个渲染 API 都需覆盖整数与浮点两种重载,并验证确实绘制出像素,而非仅未抛异常。

测试位置:Graphics 方法放 src\System.Drawing.Common\tests\GraphicsTests.cs,GraphicsPath 放 tests\Drawing2D\GraphicsPathTests.cs,Bitmap 放 tests\BitmapTests.cs,Font/文本渲染放 tests\FontTests.cs。文件过大时可用分部文件 {Class}Tests.{Feature}.cs。框架为 xUnit 加 FluentAssertions,绘图测试不需要 STA 线程,用 [Fact] 与 [Theory],不用 [WinFormsFact]/[WinFormsTheory]。

版本守卫:受版本保护的 API 测试必须使用与 API 相同的 #if 指令,目前新 API 至少面向 .NET 11,即 #if NET11_0_OR_GREATER。

位图验证:新建小位图(如 10×10),由位图获取 Graphics,调用绘图 API,用已有 unsafe 辅助方法 VerifyBitmapNotEmpty / VerifyBitmapEmpty 锁定位图位并扫描非零像素,前者用于绘制后确认有内容,后者用于确认初始为空或清除操作。所有 Bitmap、Graphics、Pen、Brush、GraphicsPath、Font 均用 using 声明释放。

重载与路径测试:为每个图元的整数(Rectangle/Point/Size)与浮点(RectangleF/PointF/SizeF)重载分别编写测试,命名遵循 {ClassName}{MethodName}{Integer|Float}。GraphicsPath 的 Add[Shape] 方法用 FluentAssertions 近似比较 PathPoints,容差通常为 0.000001f;期望点可先不加断言运行、调试捕获实际值后填入。即使整数重载委托给浮点重载,也需独立测试以验证类型转换。

其他覆盖:图形同时有 Draw 与 Fill 时测试四种组合;可补充不同画笔宽度、画刷类型、抗锯齿模式及零尺寸矩形、超大圆角半径、负坐标等边界情况。字体与文本渲染复用位图验证方式;字体度量 API 验证返回值落在预期范围而非精确像素匹配,因为字体渲染可能因环境而异。

限制与未提供内容:资料未提供具体运行命令、构建参数、弃用策略、性能基准或收费信息。