7

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

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

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

我还考虑过方法调配或为 编写一个测试类别,并使用一个除了调用块后跟块UIView之外什么都不做的实现。这对我来说似乎有点破碎。我担心在 UIView 上重写类方法的实现可能会产生意想不到的后果。animations:completion:

作为 TDD 的新手,我不确定这里有什么最佳实践。这是应该被视为“UI twiddling”的那些代码之一,因此可以接受未经测试的代码吗?还是有一些更明显的方法来测试我缺少的这个?

4

1 回答 1

5

我会简单地创建一个属性来确定动画的长度并将其默认为 0.5 秒。

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

这是依赖注入,如果您刚开始使用 TDD,它非常有用。它还具有使您的代码更模块化和更少耦合的良好副作用。

于 2013-03-07T21:12:18.283 回答