0

レイアウトの制約を利用するユーザー インターフェイスをテストする方法について、ベスト プラクティス、アドバイス、洞察を求めています。

ビュー コントローラーのサブクラスは「リーフ レベル」のデータを表示しています。たとえば、アプリが DVD をカタログ化し、このビュー コントローラーが5 つの文字列プロパティを持つインスタンスをDiscDetailViewController渡すとします。DigitalDisc目標は、これらの文字列をラベルに表示し、適切な .xml を使用してすべてを正しく流すことNSLayoutConstraintです。

DigitalDiscこのView Controllerに渡されるインスタンスの合理的な順列をできるだけ多く実行し、十分な制約を定義したことを確認する一連のテストを書きたいと思います。

たとえば、私はDigitalDiscインスタンスを持っていて、それとプロパティを設定し、titleそれを... Ack!directorにロブします。DiscDetailViewController何を主張しようか?私は立ち往生しています!

私のテストの動機は、リグレッション バグを防ぐことです。自動レイアウト (特に IB) は気まぐれですが、これは自動レイアウトに限ったことではないようです。1 つのバグを修正するだけで、一連の新しい障害が発生することは望ましくありません。これらは単体テストですか?それらは UIAutomation テストですか? それらはまったく別のものですか?

- - -編集 - - -

私のDigitalDiscクラスが次のように定義されているとしましょう:

@interface DigitalDisc : NSObject

@property NSString *title;
@property NSString *year;
@property NSString *director;
@property NSString *studio;
@property NSString *review;

@end

DigitalDiscレイアウトの制約が、フィールドに値を持たない可能性のあるインスタンスを許容できるほど柔軟であることを確認したいと思います。唯一の要件はtitleフィールドです。これは、サブビューを削除すると、インターフェイスが正しく流れる必要があることを意味します。「正しく」とはどういう意味ですか?

  1. あいまいで満足できない制約なし(UIView をテストできます-hasAmbigiousLayoutが、スローされてキャッチされる例外をテストする方法は?)
  2. 切り捨てを避けるためにラベルが複数行に展開されること
  3. 隣接するラベルが標準距離よりも近くなることも、遠くなることもありません
  4. 縦向きと横向きで上記が当てはまること

(それで十分にウサギの穴に落ちて、他の要件のいくつかを満たすことを考えることができます)


次の ADA で確実に勝つことができるいくつかのモック画面を次に示します。

View Controllerで完全に設定DigitalDiscされたインスタンスはどのように見えるか 完全に入力された <code>DigitalDisc</code>

部分的に入力DigitalDiscされたインスタンスがビュー コントローラーでどのように見えるか。

上のスクリーン ショットの「年」ラベルが削除され、「監督」ラベルが上に移動していることに注意してください。これは、私が非常に興味を持ってテストした仕様/動作のタイプです。

タイトルと監督のみの <code>DigitalDisc</code>

4

1 に答える 1

0

私はあなたの問題を誤解しているかもしれませんが、あなたが説明した方法では、代わりにテーブル ビューまたはコレクション ビューを使用することを検討します。コレクション ビューを使用すると、データ ソースは、指定されたセルの数と表示する必要があるプロパティを認識しますDigitalDisc。これは、インターフェイスをまったく起動せずに簡単に単体テストできます。次に、カスタム コレクション ビュー レイアウトを使用して、各セルが適切な高さ (ラベル内のテキストの長さ) と他のセルからの適切な距離であることを確認できます。これは単体テストも可能です。

その後、コレクション ビュー データ ソースとカスタム コレクション ビュー レイアウトを接続するだけで完了です。必要に応じて、健全性チェックのためにいくつかの UI オートメーション テストを実行することもできます。しかし、あなたが説明したようなエッジケースのテストを、インターフェースに触れない低レベルのテストに押し下げようとします。Apple がコレクション ビューのデータ ソースとレイアウトで既に奨励している分離は、問題を分割して徹底的にテストできるようにするための良い方法のように思えます。

はい、自動レイアウトでやりたいことを試すことはできますが、とにかくラベルの高さを計算する必要があり、毎回 UI をスピンアップする必要があり、遅くなります。

于 2013-04-24T01:53:30.243 に答える