我有一个使用 CoreGraphics 框架的图形应用程序,
虽然我有模型文件的单元测试套装,但我似乎无法理解如何为我的自定义 UIView 创建单元测试,
我的目标是设置视图的基本属性并查看绘制函数的结果,尽管在我的设置器中我调用了:[self setNeedsDisplay]; 我的“drawRect”函数没有从单元测试中调用,尽管它是从真实应用程序中调用的
有没有办法绘制单元测试项目?测试 ui 项目的最佳实践/工具是什么?
谢谢
我有一个使用 CoreGraphics 框架的图形应用程序,
虽然我有模型文件的单元测试套装,但我似乎无法理解如何为我的自定义 UIView 创建单元测试,
我的目标是设置视图的基本属性并查看绘制函数的结果,尽管在我的设置器中我调用了:[self setNeedsDisplay]; 我的“drawRect”函数没有从单元测试中调用,尽管它是从真实应用程序中调用的
有没有办法绘制单元测试项目?测试 ui 项目的最佳实践/工具是什么?
谢谢
测试绘图的一种简单方法是首先使绘图看起来像您想要的那样(所以没有 TDD)。然后进行将绘图渲染为 PNG 的测试。使用 #if 条件在捕获基线 PNG 和与该 PNG 进行比较之间切换测试代码。
在新的操作系统版本中,渲染可能会略有变化。因此,坚持使用单一操作系统进行基线图像测试。需要时获取新基线。
有了这种测试,您就可以重构您的绘图代码。如果它呈现相同的图像,则您的最新更改很好。如果有差异,您必须就是否接受更改做出一个直观的决定。(如果你这样做了,请捕获一个新的基线。)
编辑:这些天来,我不会手动做所有这些,而是使用iOSSnapshotTestCase。当测试失败时,它不会仅仅给出“出现问题”的结果,而是保存图像。这样,您可以进行并排比较,而无需手动启动您的应用程序并导航到相关视图。它还模拟渲染到不同方向的不同设备,这对于检查自动布局非常有用。
一般来说,单元测试视图不是正确的做法。单元测试旨在验证离散的逻辑原子,如果你正确地分解你的代码,那么你的视图中应该很少有逻辑。
更成功的方法可能是使用UIAutomation 框架(或您选择的自动化工具)。这允许您在应用程序实际运行时(在模拟器或设备上)自动模拟用户交互。captureRectWithName()
UIAutomation 具有允许您查找和截取特定视图的功能(各种视图方法和)。然后,您可以将其连接到例如ImageMagick 的命令行比较工具,以验证您绘制的内容是否正确。
我个人认为您应该使用 XCUI 测试来测试您对视图所做的任何渲染。然而,任何创建上述自定义渲染的业务逻辑,或任何数学,或您添加的逻辑都应该被测试并与任何其他类隔离。
因此,您的 UIAutomation 测试将检查您的视图是否正在呈现,但您的单元测试将验证其中可能存在的任何数学或业务逻辑。