iphone - iOS 测试驱动开发 : Testing a method that uses UIVIew animateWithDuration:animations:completion:

标签 iphone ios objective-c tdd

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

按钮按下 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/

相关文章:

ios - 如何在 XCode 4.2.1 (SDK5.0) 中安装旧版 iOS 模拟器

ios - typedef 重新定义错误 Xcode 5、iOS7 和 64 位与 32 位

objective-c - NSStringEncoding 值不正确

iphone - 如何在 iPhone 窗口应用程序中显示另一个窗口

ios - iOS 中不同设备上的图像 1x、2x 和 3x 问题

iphone - 我怎样才能从 ASINetworkQueue 中删除请求

ios - 无法绘制旋转图像

iphone - 您可以对 Facebook 帖子进行地理标记吗?

ios - Xcode无法将内容解析为info.plist

ios - 没有已知的类方法(facebook sdk 集成)