在尝试使用 UIGestureRecognizer 编写 TDD 代码时,我发现无法以编程方式验证目标操作。如果没有这个,我不确定我是否可以正确测试它。
如果手势识别器在 IB 中设置(支持 iOS 5+),则目标动作会在 NIB/Storyboard 加载时设置;如果在代码中完成,它会使用 initWithTarget:action:,这两者都意味着没有多少模拟能够检测到目标操作。
我没主意了。如果有人成功测试了 UIGestureRecognizer,我可以使用建议。
不幸的是,您正在尝试检查一个框架类,该框架类在编写时并未考虑到测试,因此不会公开您想要验证的状态。这将使断言您想要检查的目标操作对是否存在变得困难。在这种情况下,我提供了您可以使用的三个选项,但都不是很好的解决方案:
您也许能够子类化 UIGestureRecognizer,重写目标操作方法以将注册对保存在集合中,然后您可以将其公开给该类的用户,然后调用这些方法的超类实现。不幸的是,您引入新类只是为了使测试更容易,必须记住使用它们,并且可能必须从 UIGestureRecognizer 转换为自定义子类,具体取决于您从何处获取手势识别器引用。
或者,您的测试可以将新版本的目标操作方法混合到 UIGestureRecognizer 中,为您提供跟踪添加目标的钩子。只需确保在完成后将原始方法实现交换回原位,否则将来的测试将出现意外行为。
最后,您也许能够找到一个私有 API 调用,它为您提供了一种检查手势识别器上注册的目标操作的方法。只需确保私有 API 调用仅保留在您的测试代码中即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)