单元测试自定义UIView
我有一个使用CoreGraphics框架的图形应用程序,
虽然我有单元测试适合模型文件,我似乎无法理解如何为我的自定义UIView创建单元测试,
我的目标是设置视图的基本属性,并看到绘制函数的结果,但在我的setters中,我称之为[self setNeedsDisplay]; 我的'drawRect'函数不是从单元测试中调用的,虽然它是从真实应用程序调用的
有没有一种方法可以绘制单元测试项目? 测试ui项目的最佳实践/工具是什么?
谢谢
在一般的单元测试视图是不正确的事情。 单元测试是为了验证逻辑的离散原子,如果你正确地考虑了你的代码,你的视图中应该只有很少的逻辑。
更成功的方法可能是使用UIAutomation框架(或您选择的自动化工具)。 这使您可以在应用程序实际运行时(模拟器或设备上)自动模拟用户交互。 UIAutomation具有函数(各种视图方法和captureRectWithName()
),可以查找和截取特定视图。 然后,您可以将它连接到ImageMagick的命令行比较工具,以验证您正在绘制正确的东西。
测试绘图的一个简单方法是首先让绘图看起来像你想要的样子(所以没有TDD)。 然后进行测试,将绘图渲染成PNG。 使用#if条件在捕获基准PNG和与PNG进行比较之间切换测试代码。
在新的操作系统版本中渲染可能会稍微改变。 因此,坚持使用单一操作系统进行基线图像测试。 在需要时获取新的基线。
通过这种测试,您可以重构您的绘图代码。 如果它呈现相同的图像,您的最新更改是好的。 如果存在差异,则必须就是否接受更改做出眼球决定。 (如果你这样做,捕获一个新的基线。)
编辑:这些天,而不是手工完成,我会使用iOSSnapshotTestCase。 当出现测试失败时,不仅仅是给出“出错的结果”,而是保存图像。 这样,您可以进行并排比较,而无需手动启动应用程序并导航到有问题的视图。 它也模拟渲染到不同设备的不同方向,这对检查自动布局非常有用。
我个人认为你应该使用XCUI测试测试你使用视图进行的任何渲染。 但是,创建所述自定义渲染的任何业务逻辑或者添加的任何数学或逻辑都应该进行测试,并与任何其他类相隔离。
因此,您的UIAutomation测试将检查您的视图是否呈现,但您的单元测试将验证其中可能存在的任何数学或业务逻辑。
链接地址: http://www.djcxy.com/p/70199.html上一篇: unit testing custom UIView
下一篇: How to use Log4Net utility for logging into database using c#