【问题标题】:How to unit test custom implementation of drawRect如何对drawRect的自定义实现进行单元测试
【发布时间】:2014-12-09 03:43:03
【问题描述】:

我正在尝试使用 XCTest 编写一个测试来驱动 drawRect 方法的自定义实现的实现,但我不确定如何执行此操作。

由于测试,我希望编写的代码如下:

- (void)drawRect:(CGRect)rect
{
    CGPoint startOfHorizontalLine = (CGPointMake(1.0f, 0.0f));
    CGPoint endOfHorizontalLine = (CGPointMake(1.0f, 10.0f));

    UIColor * lineColour = [UIColor colorWithRed:40.0f/255.0f green:34.0f/255.0f  blue:34.0f/255.0f alpha:1.0f];
    [lineColour setStroke];

    UIBezierPath *horizontalLine = [UIBezierPath bezierPath];
    [horizontalLine moveToPoint:startOfHorizontalLine];
    [horizontalLine addLineToPoint:endOfHorizontalLine];
    [horizontalLine stroke];
}

如果我需要使用模拟库,我已经对 OCMock 进行了一些研究。

感谢您的帮助。

【问题讨论】:

  • XCTest 用于逻辑测试,而不是基于 UI 的测试。

标签: ios unit-testing ocmock xctest


【解决方案1】:

要对此进行测试,您最好将主体拉出到构建路径或配置当前绘图上下文的方法中。然后测试变得相当简单:

  • 对于构建路径的那些,您可以询问他们的路径,然后验证它是否按预期构建。
  • 对于绘图上下文,您需要建立一个绘图上下文(可能是位图上下文)并验证对上下文的预期更改(如笔划宽度、连接样式、笔划或填充颜色等)是否生效通过被测方法。

如果这不可行,那么您可能正在寻找更像黄金大师测试的东西,您可以在其中绘制看起来正确的东西,通过将绘图输出保存为图像来祝福它作为“黄金大师”,然后设置测试套件以重新绘制应该是相同的图像并比较两者。如果结果不一样,则测试失败。

【讨论】:

    猜你喜欢
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多