首页 > 解决方案 > 如何对 NS* Cocoa 类制作的位图进行稳健测试?

问题描述

我正在为我的 Mac 应用程序的 Swift 代码编写一些测试。

我需要测试的情况之一是:

  1. 有一个带有附件的 NSAttributedString

  2. 每个附件都由位图(1x 或 2x)制作,并由带有自定义颜色的代码着色

  3. 绘制属性字符串并验证输出是否与参考图像相同

另一个测试用例可能是:

  1. 有一个 NSView

  2. 在视图中绘制一些东西

  3. 验证视图的位图是否与参考图像相同

有2个问题:

  1. 根据运行测试的 Mac 硬件,Cocoa 将使用 1x 或 2x 图像。这迫使每个测试用例有 2 个参考图像,这显然是一个不切实际的解决方案。

  2. 同样取决于 Mac 硬件,生成的 NSImage 对象将采用屏幕的颜色配置文件。如果测试在另一台 Mac 上运行,或者在同一台 Mac 上但连接到不同的显示器,这会使测试失败。

我尝试更深入并使用 CG* 函数来绘制我的绘图,提供图像的大小和色彩空间。以这种方式编写的测试是稳定的,但我不能用 CG* 替换所有 NS* 代码,因为这意味着不测试与 NS* 类的集成,最后,这是我需要测试的。

在具有虚拟屏幕的环境中运行测试会很好,这样 NS* 类将始终以相同的方式运行,但我找不到它是否以及如何实现。

所以,最后一个问题是:如何测试涉及 NS* 类并生成位图的代码?

标签: swiftcocoatestingimage-comparison

解决方案


推荐阅读