5

API 呼び出しを行う REST クライアントの単体テストを作成しようとしています。クライアントはライブ アプリケーションでは正常に動作しますが、テスト ケースでは実行できません。

どうやら、ここで LoaderTestCase.getLoaderResultSynchronously() を使用できます (少なくとも Android リファレンスによると、しかし、それは私のローダーを受け入れません。コード:

public void testGetEventInfo() {
    // Init some vars
    ...

    // Create & execute loader
    RESTLoader loader = new RESTLoader(getContext(),
            RESTLoader.HTTPVerb.GET, action, params, LOADER_GET_NEWS);
    getLoaderResultSynchronously(loader);
}

これにより、エラーgetLoaderResultSynchronously(Loader) in the type LoaderTestCase is not applied for the arguments (RESTLoader) が生成されます。

RESTLoader は AsyncLoader を拡張します。私はサポートライブラリを使用していることに注意してください.おそらくそこにあるローダーは互換性がありませんか? ドキュメントには、これに関する情報はありません。

私はいくつかの方法でこれを解決しようとしましたが、どれもうまくいかないようです:

  • リスナーをローダーに登録しました。ただし、コールバックはトリガーされません
  • CountdownLatch の使用 (リスナーも使用)。繰り返しますが、トリガー/カウントダウンのタイムアウトはありません。
  • 型テンプレート () をいじってみましたが、成功しませんでした。
  • SO でも同様のソリューションですが、リスナーに到達できません。

getLoaderResultSynchronously がローダーを受け入れない理由を知っている人はいますか? または、戻りデータをテストする方法を含む、ローダーをテストする別のクリーンな方法はありますか? 別のケースで戻りデータの処理をテストできますが、実際のデータもテストしたいと思います。

心から、

4

3 に答える 3

6

ソースコードを見ましたか?次の import ステートメントがあります。

import android.content.Loader;
import android.content.Loader.OnLoadCompleteListener;

Android が のサポート バージョンを提供していないようですLoaderTestCase。最も簡単な解決策は、一時的に非サポートに変更しLoaderManager(つまり、クラスでandroid.content.Loader代わりに を使用するようにする)、アプリをテストしてから、サポート実装に戻すことです。テスト ソース コードをプロジェクトにコピーし、サポートをインポートしLoaderManagerて直接実行することも検討してください。私はLoaders のテスト ライブラリに詳しくありませんが、これが大きな問題を引き起こすことは外見上明らかではないようです。

于 2012-07-09T22:10:34.617 に答える
3

ここでLoaderTestCase からソースを取得し、テスト プロジェクトでそのソースから SupportLoaderTestCase クラスを作成し、ライブラリの名前空間をサポートするようにすべての名前空間を変更します (たとえば、android.content.Loader を android.support.v4.content.Loader に変更します)。テスト ケースを SupportLoaderTestCase (LoaderTestCase からではなく) から拡張し、問題なく使用できるよりも

于 2014-01-16T15:41:10.627 に答える
0

呼び出そうとしているメソッド (getLoaderResultSynchronously) は、タイプ android.content.Loader のオブジェクトを受け入れます。RESTLoader クラスがその EXACT タイプでない場合、このエラーが発生します。あなたのクラスは直接的または間接的に android.support.v4.content.Loader を拡張していると思われます。これによりエラーが説明されます。

このタイプのクラスのテストをサポートする LoaderTestCase のバックポートについては知りません。

于 2012-07-09T21:48:29.693 に答える