2015-11-04 16 views
11

(XCode 7)UI XCTestCaseのテストケースを試していて、1つのUIViewで問題に遭遇しました。 )。XCTestCase - iOS UIテスト - 多くのセルを持つUITableViewを扱う

アプリが正常に実行されている場合、表示されているセルのみが表示され、パフォーマンスの問題はまったく発生しません。 しかし、XCTestCaseを記録するコンテキスト内でアプリを実行してこの画面に移動すると、シミュレータがフリーズします。各セルが表示されているかのようにレンダリングされるためです。 手動でナビゲーションスクリプトを作成しようとすると、XCTestCaseを実行すると、この画面に移動した直後にテストケースが失敗し、「UIテストの失敗 - 更新されたスナップショットを取得できませんでした」というメッセージが表示されます。時間内に終了しません。

これは、テストフレームワークが表示されている画面のメタモデル全体を構築し、4000個以上の各セルをビューツリー階層に追加するという事実と関係していると思います。

これは、テスト用のコンテナにすべてのセルのレンダリングを完了するのに十分な時間がかかることを期待していましたが、これはうまくいきません。

回避策はありますか? UIツリーの階層構造などの一部をスキップするのはどういうことですか? 私の目標はこの画面のUIテストを書くことです。

+0

テストコードを表示してください。 Thks – glm4

+0

3つのラベルと2つのイメージを持つカスタムセルです。 [tableView indexPathsForVisibleRows]を使用して回避することができました。セルが表示されているかどうか、テスト用に[UITableViewCell new]が返されない場合は、使用されているセルは十分に単純ですが、これは私が探しているものではありません。 私は何とかユーザーインターフェイスのツリーを遅れて構築することを考えていますが、今は可能だとは思いません。 このような重大な副作用(この場合はすべてのセルの読み込みなど)を持たないように、これらのxc UIテストケースを構成できればいいでしょう。 –

答えて

1

私は同じ問題を抱えていましたが、テーブル全体が読み込まれるのを待つのが楽しいですが、それは私が次の回避策を使ってやったことです。

これは、あなたが探しているものではないかもしれないが、それは他の人を助けることがあります。

彼らはテーブルがまだロードされたことを意味し等しくない場合、基本的に、私は2回連続してテーブル内のセルをカウントしています。それをループに入れて、両方のカウントが同じ数値を返すまで、テーブルをロードすることを意味します。私は30秒以上かかるので、テストは失敗します(これは私の場合は十分な時間でした)。あなたのテーブルがそれ以上の時間がかかる場合は、3分間など180分に増やすことができます。

let startTime = NSDate() 
    var duration : TimeInterval 
    var cellCount1 : UInt = app.tables.cells.count 
    var cellCount2 : UInt = app.tables.cells.count 
    while (cellCount1 != cellCount2) { 
     cellCount1 = app.tables.cells.count 
     cellCount2 = app.tables.cells.count 
     duration = NSDate().timeIntervalSince(startTime as Date) 
     if (duration > 30) { 
      XCTFail("Took too long waiting for cells to load") 
     } 
    } 
    //Now I know the table is finished loading and I can tap on a cell 
    app.tables.cells.element(boundBy: 1).tap() 
関連する問題