2

ActivityInstrumentationTestCase2 を拡張して Android アクティビティ テスト ケースを作成しています。私がテストしているアクティビティは、作業をローダーにオフロードします。Activity 自体は LoaderCallback です。

問題は、ローダーが作業を完了する前にテスト ケースが終了することです (ローダーが明らかにテスト ケースとは別のスレッドで実行されているため)。ローダーが作業を完了するまでテスト ケースを待機させるにはどうすればよいですか。

私が考えていた 1 つの考えは、基になるローダー スレッドに参加することでした。ただし、基になるスレッドにアクセスする方法が見つからないようです。また、ローダー スレッドがすぐに開始されない可能性があるため、これが正しいアプローチかどうかはわかりません。

私が持っていたもう1つは、テストケースにLoaderListenerを登録することでしたが、特定のローダーは1つのLoaderListenerしか持てないようです。

4

3 に答える 3

1

最大タイムアウトを設定できます。最大タイムアウトに達するまで、ローダーの null 値を頻繁に確認してください。最大タイムアウトが設定されると、ローダーがロードされないため、テストが失敗します。

于 2012-07-06T00:01:31.320 に答える
0

テスト ケースが実行されているスレッドと、完了するのを待っているバックグラウンド スレッドまたはアクションとの間で、何らかの Java 同期メソッドを使用する必要があります。

カウントダウンラッチを使用しました。

テスト中のコード(私の場合はアクティビティ)

アクティビティの作成時に初期化する

  • プライベート最終 CountDownLatch 信号 = 新しい CountDownLatch(1);

ローダーが終了したら、コードが完了したことを知らせます。

  • signal.countDown();

テスト対象のコードでラッチのゲッターを提供します

  • public CountDownLatch getSignal() { シグナルを返します。}

あなたのテストでは:

  • アクティビティを開始します (バックグラウンド スレッドを開始します)
    • MainActivity アクティビティ = getActivity();
  • ラッチを待機させる
    • CountDownLatch シグナル = activity.getSignal();
  • 他のことをしてから、バックグラウンド タスクが終了するのを待ちます
    • if (!signal.await(30, TimeUnit.SECONDS)) { fail("バックグラウンド タスクの完了を待ってタイムアウトしました"); }

これは、アクティビティの onCreate() メソッドによって開始されるバックグラウンド スレッド、AsyncTasks などで行われているものに対して機能します...

于 2013-10-26T22:13:53.537 に答える
0

ミューテックスまたは ReentrantLock で実行してみてください。

于 2013-03-20T16:20:15.920 に答える