2

私はエスプレッソテストを書いています。ここにテストケースがあります。45秒以内にインテントを起動できませんでした。多分、メインスレッドは妥当な時間内にアイドル状態にならなかったでしょうか?

OnClick of Fab、アプリはQuizActivityを起動します。

私のアプリについて少し説明しましょう。

だから、アプリの要件でした -

  1. 私はrecyclerviewに、データベースからこのデータをロードし、それを解析し、主な活動上のデータベース
  2. にデータを格納する必要がある資産フォルダ
  3. でJSONファイルがあります。 )(

    1. MainActivityののonCreateで - それはアプリQuizActivityに(私はrecyclerviewにロードされている)データのランダムなリストを渡すののFabボタンは、私がコーディングどうやっ
    2. ここ

    があるクリックで、ありますAsyncTaskを使用して、データベースにデータを1回だけ解析して挿入します。

  4. データが利用可能になったら、AsyncTaskLoader
  5. を使用してrecyclerviewにロードし、FabのOnclickリスナーを設定します。必要なデータをQuizActivityに渡しました。以下は

私のアプローチがある

@RunWith(AndroidJUnit4.class) 
public class ExampleInstrumentedTest { 
    /* @Rule 
    public IntentsTestRule<MainActivity> intentsTestRule = 
      new IntentsTestRule<MainActivity>(MainActivity.class); 
*/ 

    @Rule 
    public ActivityTestRule<MainActivity> intentsTestRule = 
      new ActivityTestRule<MainActivity>(MainActivity.class,false,true); 

    @Test 
    public void fabTest(){ 
     onView(withId(R.id.fab)).perform(click()); 
     //Check if the text_question textview is displayed 
     onView(withId(R.id.text_question)).check(matches(isDisplayed())); 
    } 

    /* @Test 
    public void clickFloatingActionButton() { 
     onView(withId(R.id.fab)) 
       .perform(click()); 
     intended(hasComponent(new ComponentName(getTargetContext(), QuizActivity.class))); 
    }*/ 
} 

私のテストです -

  1. のFab
  2. を探すtext_questionのTextViewに表示されている場合
  3. チェックをクリックし実行します。このテキストビューはQuizActivityにあります。

私は取得していますテストを実行した後

java.lang.RuntimeException:意図テントを起動できませんでした{ 行為= android.intent.action.MAIN FLG = 0x14000000 CMP = my_package_name/.MainActivity}を45秒以内に入力します。多分、 メインスレッドは、妥当な時間内にアイドル状態にならなかったでしょうか? 画面をアニメーションや何かを常時ペイントすることができます。または、アクティビティが作成時にネットワークコールを行っていますか?スレッドダンプログ を参照してください。あなたの活動の開始要求が1505287862579であった前に、イベントキューがアイドルだった最後の時間は、 でした。最後にキューがアイドルになったのは でした。これらの数字が の場合、同じアクティビティがイベントキューを突き抜けている可能性があります。

PS - すべてのアニメーションをオフにしました。コードに進捗バーがありません。

また、onCreate()メソッドのAsyncTask、AsyncTaskLoader、RecyclerViewの部分をコメントアウトすると、テストがパスします。

バックグラウンドタスクの原因である可能性があります。

誰もが同様の問題に直面しましたか?あなたが解決策を知っていれば教えてください。私は2日間から苦労している。私はstackoverflowで同様のスレッドを検索したが、何も私のために働いた。

答えて

3

私は最終的に解決策を得ました!

実際、私のアダプターでは、犯人がカスタムビューでした。

エスプレッソはAsyncTaskまたはAsyncTaskLoaderデータをロードするまで待ちますが、それは例外で述べたように、この問題を引き起こしてカスタムビューのようになります。

メインスレッドが妥当な時間内のアイドル行っておりませんか? 画面をアニメーションや何かを常時ペイントすることができます。とにかく、私は何をする必要があるか、この問題を克服する

される -

は、あなたがそれをどのように行うだろう「テストが実行されている場合は、GONEにカスタムビューの可視性を設定しますか」?今ここで私は、ViewHolderでそう

public InsectHolder(View itemView) 
     { 
      super(itemView); 
         customView = (DangerLevelView) itemView.findViewById(R.id.danger_level_tv); 

      if(isRunningTest()) { 
       customView.setVisibility(View.GONE); 
      } 
     } 

そしてイェーイをRecyclerviewを使用しています

private AtomicBoolean isTestRunning; 

    public synchronized boolean isTestRunning() { 
     if (null == isTestRunning) { 
      boolean istest; 

      try { 

       Class.forName ("Full path of your TestName"); // for e.g. com.example.MyTest 

       istest = true; 
      } catch (ClassNotFoundException e) { 
       istest = false; 
      } 

      isTestRunning = new AtomicBoolean (istest); 
     } 

     return isRunningTest.get(); 
    } 

!あなたのテストは合格となります。

誰かが助けてくれることを願っています!

下記のコメント欄にご質問がありましたら教えてください。

関連する問題