1

Subliminalを使用して統合テストを作成するのは初めてです。そして、ユーザーがボタンをタップした後に特定のView Controllerが表示されるかどうかをテストしたいと思います。これをテストする最良の方法は何ですか?

  • サブリミナルを使用して最上位のビュー コントローラーを取得し、そのタイトルを見つけることはできますか?
  • 最上位のView Controllerを取得して、そのクラスを比較できますか?
  • ナビゲーション コントローラのタイトル ラベルは使用できますか?

現時点では、次のように、ナビゲーション コントローラーのタイトル ラベルをアクセシビリティ ラベルで取得することしかできませんでした。

SLElement *titleLabel = [SLElement elementWithAccessibilityLabel:@"Welcome"]; SLAssertTrue([[UIAElement(titleLabel) label] isEqualToString:@"Welcome"], @"It should show the Welcome screen");

しかし、私はただテストするだけです@"Welcome" == @"Welcome". また、ウェルカムラベルは、他のビュー コントローラーのビュー階層にも表示される場合があります。

ユーザーのアクションの後に表示されるView Controllerが実際に私が期待しているView Controllerであるかどうかをテストしてアサートするアプローチは何ですか?

ありがとう!

4

1 に答える 1

2

アクセシビリティ ラベル、値、特性の組み合わせでは記述できない (または一意に記述できない) アクセシビリティ階層内のオブジェクトを識別するには、 を使用するのが最善の策[SLElement elementMatching:withDescription:]です。メソッドは次のように使用されます。

SLElement *titleLabel = [SLElement elementMatching:^BOOL(NSObject *obj) {
    // Code to test objects (obj parameter) in the accessibility hierarchy,
    // and return YES or NO depending on whether or not obj is the particular
    // object you're looking for.
} withDescription:@"A description of the view for Subliminal to use in logs/error reports"];

マッチング ブロックに何が入るかは、アプリの構造と正確に識別しようとしているものによって異なりますが、基本的に任意のコードをそこに配置して、入力アクセシビリティ要素を評価できることを覚えておいてくださいobj。そのラベルがthenobj.accessibilityLabelと等しいかどうかを検査し (それが であることを確認します)、ナビゲーション コントローラー内に存在することを証明する特定のビューまたはクラス (おそらく ) を探してビュー階層を上ります。または、クラスをテストして、確認しようとしている特定のナビゲーション コントローラーにのみ表示されるものを探すこともできます。@"Welcome"objUIViewUINavigationBarobjobj

このような問題にアプローチするために使用できる別のツールは、サブリミナルapp-hookです。サブリミナル テストからのメッセージに応答するために、アプリケーション (クラスまたは特定のインスタンス) にオブジェクトを登録できます。したがって、たとえば、アプリケーション デリゲートがこのビュー コントローラーが表示されているかどうかを認識している場合、アプリケーション デリゲートを登録して、ビュー コントローラーが表示されているかどうかを示すメッセージに応答し、テスト コードで使用できます。SLAskAppYesNoView Controllerが表示されている/表示されていないかどうかを確認します。

于 2013-11-20T20:51:03.083 に答える