7

アニメーションを起動するボタンを押し、アニメーションが完了すると、ラベルのテキストを変更します。ボタンが押されると、最終的にラベルのテキストが適切に変更されることを確認するテストを書きたいと思います。

ボタン押下 IBAction の実装は を使用します[UIView animateWithDuration:animations:completion:]。明らかに、単体テストでアニメーションが完了するまで実際に 0.5 秒待たされることは望ましくありません。

UIView をモックすることも考えましたが、View Controller への依存関係として UIView を挿入するのは奇妙に思えます。さらに、私が使用しているモッキング フレームワーク (OCMockito) は、クラス メソッドのモッキングではうまく機能しないようです。

また、メソッドのスウィズリングまたは のテスト カテゴリの記述、およびブロックの後に続くブロックUIViewを呼び出すだけの実装を使用することについても考えました。それは私には少し壊れているようです。UIView でクラス メソッドの実装をオーバーライドすると、予期しない結果が生じるのではないかと心配しています。animations:completion:

TDD を初めて使用するので、ここでどのようなベスト プラクティスがあるかわかりません。これは「UI のいじり」と見なされるべきコードの 1 つなので、テストしないままにしておいてもよいのでしょうか? または、私が見逃しているこれをテストするためのより明白な方法はありますか?

4

1 に答える 1

5

アニメーションの長さを決定するプロパティを作成し、デフォルトを 0.5 秒に設定するだけです。

そうすれば、テストでアニメーションの継続時間を 0 に設定し、ラベルのテキストが待機せずに更新されることを確認できます。

これは依存性注入であり、TDD を始めたばかりの場合に非常に役立ちます。また、コードをよりモジュール化して結合を少なくするという素晴らしい副作用もあります。

于 2013-03-07T21:12:18.283 に答える