2016-04-01 9 views
0

私は活動があります。それは多くの断片を取ることができます。まず、リストビューを持つMyFeedフラグメントが必要です。リストビューのモデルはネットワークから取得されます。リスト内の項目の1つをクリックすることができます。アイテムの1つをクリックすると、EndFragmentが表示されます。エンドフラグメントにはネットワークからのモデルも必要です。エスプレッソ:待機する多くの状況のアイドリングリソース

私は2つのアイドリングリソースが必要です。

これは私のテストシナリオです。

  1. リストビューのモデルは
  2. を取らされるまで待機リストビュー内の最初の項目をクリックします。
  3. EndFragmentが来て、EndFragmentで何かします。

ネットワークリクエストを待つ必要があるため、私はMyfeedListIdlingResourceを作成しました。

private class MyfeedListIdlingResource implements IdlingResource { 

    private ResourceCallback mResourceCallback; 

    @Override 
    public String getName() { 
     return MyfeedListIdlingResource.class.getName(); 
    } 

    @Override 
    public boolean isIdleNow() { 
     boolean ready = mActivityRule.getActivity().myfeedListReady(); 
     return ready; 
    } 

    @Override 
    public void registerIdleTransitionCallback(ResourceCallback resourceCallback) { 
     mResourceCallback = resourceCallback; 
    } 
} 

は、そして、これは私のテストコードです。(私はすでにMyfeedListIdlingResource上に登録されている)、このテストコードで

// step 1. Click first item in the listview. This brings Endfragment 
    onData(withValue("POST")) 
      .inAdapterView(withId(R.id.fm_listview)) 
      .atPosition(0) 
      .perform(click()); 

    // step 2. Click a view in EndFragment 
    onView(withId(R.id.btnComment)).perform(click()); 

、私はMyfeedListIdlingResourceを登録しているためステップ1がうまく渡されます。しかし、このエラーコードでは手順2で失敗します。

リソースcom.naver.android.pholar.StickerCommentTest $ MyfeedListIdlingResource isIdleNow()はtrueを返しますが、リソースがビジー状態からアイドル状態に移行したことを示すメッセージは送信されませんでした。

どうすればこのような状況に対処できますか? (私がThread.sleep()を使用している場合、テストコードはうまくいっています)

答えて

1

onDataステートメントを使用している場合、IdlingResourceは必要ありません。エスプレッソはあなたのリストをロードし、必要なアイテム自体にナビゲートします。このため、このエラーが発生しています。あなたのアイドルリソースを簡単に削除する必要があり、それがなければうまくいくはずです。

あなたはのThread.sleep()を使用しますが、それはあなたの関心をhere

+0

おかげ記載されているようIdlingResourceを使用しない方が良いです、あなたのテストの時間に基づいて、遅延を使用したい場合。私のリストはフッターとヘッダーで初期化されています。そして、それはネットワークからデータが受信されます。したがって、ネットワークからデータを受け取るまでThead.slpeep()またはIdle Resourceを使用しないと、エスプレッソはリストビュー項目を見つけることができません。 –

関連する問題