按下按钮可以触发动画,动画完成后,会更改标签的文本。我想写一个测试验证当按下按钮时,标签的文本最终会正确更改。
按钮按下IBAction的实现将使用[UIView animateWithDuration:animations:completion:]
。我显然不希望我的单元测试实际上等待0.5秒才能完成动画。
我想过嘲笑UIView,但是将UIView作为依赖项注入视图控制器似乎很奇怪。此外,我正在使用的模拟框架(OCMockito)似乎不适用于模拟类方法。
我还考虑了方法调整或编写UIView
的测试类别,并使用一个实现除了调用animations:
块后跟completion:
块时什么都不做。这对我来说似乎有些不妥我担心在UIView上覆盖类方法的实现可能会产生意想不到的后果。
对TDD不熟悉,我不确定这里有什么最佳做法。这是否应该被视为“UI twiddling”的代码片段之一,因此可以接受未经测试的?或者是否有一些更明显的方法来测试我缺少的东西?
答案 0 :(得分:5)
我只想创建一个确定动画长度的属性,默认为0.5秒。
这样,您的测试可以将动画持续时间设置为0,并观察标签的文本是否更新而无需等待。
这是dependency injection,如果您刚开始使用TDD,它会非常有用。它还具有很好的副作用,使您的代码更加模块化,更少耦合。