2

私は Web サービス ベースのアプリを持っています。つまり、各アクティビティは特定の Web サービスを呼び出し、データを表示します。私はまだテストを行っていませんが、切り替えの過程にあり、Volleyテストも追加する可能性があると考えていました.

このようなアプリのテスト戦略はどうあるべきか考えていました。私は をいじっていますが、まだうまく機能してgradle-android-test-pluginいませんが、すぐに機能するはずです (期待しています)。RobolectricVolley

とにかく、私のアプリに使用する構造は次のとおりです。

  • ObjectJacksonRequestWeb サービスからデータを取得し、POJO に解析するクラス
  • RequestQueue標準ボレー リクエスト キュー
  • BaseActivityRequestQueueオブジェクトとその他の一般的なものを収容するすべてのアプリのアクティビティの親アクティビティ
  • UI コードをネットワーク コードから分離するために使用するさまざまな抽象アクティビティ。たとえば、AbstractAppleActivity は、リンゴを必要とするアクティビティによって拡張されます。抽象アクティビティは、返されたときに Apple がまだメモリ内にあるかどうかを確認する、新しいものをロードする、リスト ビュー用のアダプタをセットアップするなどのことを行います。

ここに私が現在持っている質問があります。私は答えがどうあるべきかについてある程度の直感を持っていますが、コミュニティから聞きたいです。人々が持つ可能性のある他の質問もあると確信しており、それらをこのリストに追加できます。

  • ObjectJacksonRequestさまざまな Web サービスのオブジェクトをテストする良い方法は何ですか? および object を返す Web サービスごとに個別のテストを作成する必要がありますか?
  • 実際の Web サービスを使用してネットワーク リクエストをテストする必要がありますか、それとも応答を模擬する必要がありますか?
  • BaseActivityおよび抽象アクティビティまたはその機能を拡張するアクティビティをテストする必要がありますか?
  • Web リクエストが完了するまで値が挿入されないアクティビティをテストする最良の方法は何ですか? たとえば、リンゴのリストをロードするアクティビティです。
4

2 に答える 2

0

テストの経験が増えたので、さまざまなソースから集めた提案を以下に示します。

- What's a good way to test the ObjectJacksonRequest object for the various web services ? 
- Should I be writing a separate test for each web service that returns an object ?
- Should I be testing the BaseActivity and the abstract activities or the activities that extend it for it's functionality ?

これらの質問はすべて 1 つにまとめることができます。これは、継承階層のテストの問題です。答えは、残念ながら場合によるということです。ただし、ほとんどの場合、抽象クラスの場合、サブクラスをテストすると、親クラスもテストされます。異なるサブクラスで異なるユースケースを持つメソッドがある場合を除き、その場合は抽象クラスをテストして、コーディング時にすべてのケースをテストできるようにすることをお勧めします (ただし、これが発生する場合は、定義したほうがよい場合があります)。より多くのオブジェクト)。

- Should I be testing network requests with the actual webservices or mock the responses ?

これは簡単です。常にモック。他の回答が述べたように、flaky実際の Web サービスを使用している場合、テストを作成するリスクがあります。言うまでもなく、Web サービスのテストはあなたの責任ではありません。自分が担当するコードのみをテストする必要があります。

- What is the best way to test an activity that doesn't have any values inserted until the web request is completed ? For example, an activity that loads a list of apples

これは、モックされたサービスに従う必要があります。モックされたサービスを取得したら。これを使用して、信頼できる方法でアクティビティにデータを送信し、結果をテストできます。

その他の注意事項:

上記は具体的な回答ですが。一般的に、アプリのテストだけでなくモジュール化を容易にするエンジニアリング上の決定を下すことが有用であることがわかりました。これらは、質問に従って、アプリの設計で発生したエンジニアリングの間違いからのヒントと禁止事項の一部です。

  • サービスにカスタム ラッパーを使用する: 私の質問では、Android の元の HTTP から Volley に移行しようとしています。これらの問題の理由の 1 つは、アプリの設計がアプリをネットワーク ライブラリと結び付けていることです。これを回避する 1 つの方法はinjected、コード内にあるラッパー クラスを使用することです。ラッパー クラスの基になる実装は、他のソース コードに影響を与えることなく変更できます。このトピックに関するブログ投稿がここにあります
  • Java モジュールを使用する: gradle Java プラグインに基づく Android gradle プラグイン。したがって、Android アプリ プロジェクトで Java ライブラリ モジュールを作成できます。unit testこれが、 Android API とやり取りしないコードに対する最良の方法であることがわかりました。これは、Android テスト フレームワークとRobolectric. Java ライブラリ モジュールを使用していると、Java モジュールでできるだけ多くの作業を実行しようとしているため、UI コードが軽くなることがわかりました。
于 2014-03-07T06:50:02.367 に答える