レイアウトの制約を利用するユーザー インターフェイスをテストする方法について、ベスト プラクティス、アドバイス、洞察を求めています。
ビュー コントローラーのサブクラスは「リーフ レベル」のデータを表示しています。たとえば、アプリが 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
フィールドです。これは、サブビューを削除すると、インターフェイスが正しく流れる必要があることを意味します。「正しく」とはどういう意味ですか?
- あいまいで満足できない制約なし(UIView をテストできます
-hasAmbigiousLayout
が、スローされてキャッチされる例外をテストする方法は?) - 切り捨てを避けるためにラベルが複数行に展開されること
- 隣接するラベルが標準距離よりも近くなることも、遠くなることもありません
- 縦向きと横向きで上記が当てはまること
(それで十分にウサギの穴に落ちて、他の要件のいくつかを満たすことを考えることができます)
次の ADA で確実に勝つことができるいくつかのモック画面を次に示します。
View Controllerで完全に設定DigitalDisc
されたインスタンスはどのように見えるか
部分的に入力DigitalDisc
されたインスタンスがビュー コントローラーでどのように見えるか。
上のスクリーン ショットの「年」ラベルが削除され、「監督」ラベルが上に移動していることに注意してください。これは、私が非常に興味を持ってテストした仕様/動作のタイプです。