我有一个可以触发动画的按钮按下,并在动画完成后更改标签的文本。我想编写一个测试来验证当按下按钮时,标签的文本最终会正确更改。
按钮按下 IBAction 的实现将使用 [UIView animateWithDuration:animations:completion:]
。我显然不希望我的单元测试实际等待 0.5 秒让动画完成。
我考虑过模拟 UIView,但将 UIView 作为 View Controller 的依赖项注入(inject)似乎很奇怪。此外,我正在使用的模拟框架 (OCMockito) 似乎不适用于模拟类方法。
我还考虑过方法调配或为 UIView
编写测试类别,并使用一个只调用 animations:
block 的实现,然后调用 完成:
block 。这对我来说似乎有点 splinter ;我担心在 UIView 上重写类方法的实现可能会产生意想不到的后果。
作为 TDD 的新手,我不确定这里有什么最佳实践。这是应该被视为“UI 摆弄”的代码片段之一,因此可以接受未经测试的代码吗?或者是否有一些更明显的方法来测试我所缺少的?
最佳答案
我会简单地创建一个属性来确定动画的长度并将其默认为 0.5 秒。
这样,您的测试可以将动画持续时间设置为 0,并观察标签的文本无需等待即可更新。
这是 dependency injection ,如果您刚开始使用 TDD,它会非常有用。它还具有使您的代码更加模块化和更少耦合的良好副作用。
关于iphone - iOS 测试驱动开发 : Testing a method that uses UIVIew animateWithDuration:animations:completion:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15281699/