7

CoreGraphics フレームワークを使用したグラフィック アプリケーションがあります。

モデル ファイルの単体テスト スーツを持っていますが、カスタム UIView の単体テストを作成する方法がわかりません。

私の目標は、ビューの基本的なプロパティを設定し、描画関数の結果を確認することですが、私のセッターでは次のように呼び出しました: [self setNeedsDisplay]; 私の「drawRect」関数は、実際のアプリケーションから呼び出されていますが、単体テストから呼び出されていません

単体テスト プロジェクトを描画する方法はありますか? UIプロジェクトをテストするためのベストプラクティス/ツールは何ですか?

ありがとう

4

3 に答える 3

3

描画をテストする簡単な方法は、最初に描画を希望どおりに見せることです (TDD は必要ありません)。次に、図面を PNG にレンダリングするテストを行います。#if 条件を使用して、ベースライン PNG のキャプチャとその PNG との比較の間でテスト コードを切り替えます。

新しい OS バージョンでは、レンダリングがわずかに変わる可能性があります。そのため、ベースライン イメージのテストには 1 つの OS を使用してください。必要なときに新しいベースラインを取得します。

この種のテストを行うと、描画コードをリファクタリングできます。同じ画像がレンダリングされる場合、最新の変更は有効です。違いがある場合は、変更を受け入れるかどうかについて目で判断する必要があります。(そうする場合は、新しいベースラインを取得します。)

編集:最近では、すべてを手作業で行う代わりに、iOSSnapshotTestCaseを使用します。テストに失敗した場合、単に「問題が発生しました」という結果を出す代わりに、画像を保存します。このようにして、アプリを手動で起動して問題のビューに移動することなく、並べて比較できます。また、さまざまな方向のさまざまなデバイスへのレンダリングをシミュレートします。これは、自動レイアウトを確認するのに非常に役立ちます。

于 2013-03-20T04:28:08.163 に答える
2

一般に、ユニットテストビューは正しいことではありません。単体テストは、ロジックの個別のアトムを検証することを目的としています。コードを適切にファクタリングしている場合、ビューにはロジックがほとんどないはずです。

より成功するアプローチは、UIAutomationフレームワーク(または選択した自動化ツール)を使用することです。これにより、アプリが実際に実行されている間(シミュレーターまたはデバイス上で)、シミュレートされたユーザー操作を自動化できます。captureRectWithName()UIAutomationには、特定のビューを検索してスクリーンショットを撮ることができる関数(さまざまなビューメソッド、および)があります。次に、それをたとえばImageMagickのコマンドライン比較ツールに接続して、正しいものを描画していることを検証できます。

于 2013-03-20T06:58:32.963 に答える