iOS TDD:测试使用UIVIew animateWithDuration的方法:动画:完成:

时间:2013-03-07 21:03:18

标签: iphone ios objective-c tdd

按下按钮可以触发动画,动画完成后,会更改标签的文本。我想写一个测试验证当按下按钮时,标签的文本最终会正确更改。

按钮按下IBAction的实现将使用[UIView animateWithDuration:animations:completion:]。我显然不希望我的单元测试实际上等待0.5秒才能完成动画。

我想过嘲笑UIView,但是将UIView作为依赖项注入视图控制器似乎很奇怪。此外,我正在使用的模拟框架(OCMockito)似乎不适用于模拟类方法。

我还考虑了方法调整或编写UIView的测试类别,并使用一个实现除了调用animations:块后跟completion:块时什么都不做。这对我来说似乎有些不妥我担心在UIView上覆盖类方法的实现可能会产生意想不到的后果。

对TDD不熟悉,我不确定这里有什么最佳做法。这是否应该被视为“UI twiddling”的代码片段之一,因此可以接受未经测试的?或者是否有一些更明显的方法来测试我缺少的东西?

1 个答案:

答案 0 :(得分:5)

我只想创建一个确定动画长度的属性,默认为0.5秒。

这样,您的测试可以将动画持续时间设置为0,并观察标签的文本是否更新而无需等待。

这是dependency injection,如果您刚开始使用TDD,它会非常有用。它还具有很好的副作用,使您的代码更加模块化,更少耦合。