如何TDD UIGestureRecognizers?

nhe*_*agy 6 tdd xcode unit-testing objective-c uigesturerecognizer

在尝试使用UIGestureRecognizer的TDD代码时,我发现无法以编程方式验证目标操作.没有这个,我不确定我能否正确测试它.

如果手势识别器在IB中设置(支持iOS 5+),则在NIB/Storyboard加载时设置目标操作; 如果在代码中完成它使用initWithTarget:action:,这两者都意味着没有任何模拟能够检测到目标动作.

我没有想法.如果有人成功测试了UIGestureRecognizer,我可以使用这个建议.

Jon*_*nah 4

不幸的是,您正在尝试检查一个框架类,该框架类在编写时并未考虑到测试,因此不会公开您想要验证的状态。这将使断言您想要检查的目标操作对是否存在变得困难。在这种情况下,我提供了您可以使用的三个选项,但都不是很好的解决方案:

您也许能够子类化 UIGestureRecognizer,重写目标操作方法以将注册对保存在集合中,然后您可以将其公开给该类的用户,然后调用这些方法的超类实现。不幸的是,您引入新类只是为了使测试更容易,必须记住使用它们,并且可能必须从 UIGestureRecognizer 转换为自定义子类,具体取决于您从何处获取手势识别器引用。

或者,您的测试可以将新版本的目标操作方法混合到 UIGestureRecognizer 中,为您提供跟踪添加目标的钩子。只需确保在完成后将原始方法实现交换回原位,否则将来的测试将出现意外行为。

最后,您也许能够找到一个私有 API 调用,它为您提供了一种检查手势识别器上注册的目标操作的方法。只需确保私有 API 调用仅保留在您的测试代码中即可。