1

アプリのアクティビティテストを作成しようとしています。テストしたい特定のシナリオの1つは、特定のボタンをクリックすると、それに応じてアクティビティビューが更新されることです。ただし、ボタンをクリックすると、実行時間の長い非同期タスクが開始され、そのタスクが完了した後にのみビューが変更されます。

どうすればこれをテストできますか?現在、ActivityInstrumentationTestCase2クラスを使用してこれを実行しようとしていますが、ボタンクリックタスクの非同期部分が完了してビューが更新されるまで、テストを「待機」させる方法を理解するのに問題があります。

4

3 に答える 3

3

最も一般的で最も単純な解決策は、以下を使用することThread.sleep()です。

public void testFoo() {
  TextView textView = (TextView) myActivity.findViewById(com.company.app.R.id.text);
  assertEquals("text should be empty", "", textView.getText());

  // simulate a button click, which start an AsyncTask and update TextView when done.
  final Button button = (Button) myActivity.findViewById(com.company.app.R.id.refresh);
  myActivity.runOnUiThread(new Runnable() {
    public void run() {
      button.performClick();
    }
  });

  // assume AsyncTask will be finished in 6 seconds.
  try {
    Thread.sleep(6000);
  } catch (InterruptedException e) {
    e.printStackTrace();
  }

  assertEquals("text should be refreshed", "refreshed", textView.getText());
}

お役に立てれば。

于 2012-05-08T02:55:38.077 に答える
0

Eclipseを使用している場合は、ビューを更新するコードにブレークポイントを設定することでデバッガーを使用できます。長時間実行されるタスクにいくつかのブレークポイントを設定して、すべてのコードが実行されていることを監視および確認することもできます。

別の方法として、実行時間の長いタスクとビューアップデーターコードにログまたはコンソール出力を書き込んで、デバッガーによってスレッドを中断することなく進行状況を確認できるようにします。

アドバイスとして、長時間実行されるプロセスの場合は、ユーザーに説明の進行状況バーを表示する必要があります。そうすれば、ユーザーは「何かが起こっているのか」と考えて立ち往生することはありません。最大値のプログレスバーを使用すると、実行中の長時間実行タスクでプログレスバーを更新できるため、ユーザーはアクティビティが10%から20%に変化するのを確認できます...など。

ある種のjUnit固有の回答を期待していた場合は申し訳ありません。

于 2012-05-08T02:26:37.707 に答える
0

私は、文字列とタイムアウト期間を取り、期待されるテキストが表示されるかタイムアウトが発生するまでブロックするRobotiumライブラリのSolo.waitForTextメソッドを使用してこれを解決することになりました。素晴らしいUIテストライブラリ。

于 2012-05-16T22:42:51.190 に答える