2017-02-02 3 views
0

Android(モック)を使用し、エンドポイントでバックエンドを実行するクライアントライブラリをテストするオプションがあるのでしょうか?エミュレータを使用しないAndroid統合テスト

ユースケースは次のようになります。

は、Androidのコンテキスト(それからの抽出データ)を必要と「A」と呼ばれるライブラリを持っており、Googleのサービス(モックすることができます)。私はRobolectricができないことをどこにでも読んだ

A.sendData(context) → waits for server response → assert result. 

:そのようにテストのライフサイクルは、可能性が...

を、広告ID、電話情報などのデータを収集しA.sendData(コンテキスト)を呼び出します統合フレームワークとして使用できます。私はトリックを行ったUIを使用してInstrumentedテストを作成しましたが、実行には時間がかかり、リモートCI(タイムアウト、時には時にはそれを渡しません)で正しく動作しません。

Androidデバイスの「ちょっと」の部分(UIは不要)を模擬し、バックエンドが有効なデータを返すかどうかをテストする必要があるため、おそらくエミュレータは必要ありません。または、エミュレータが必要な場合は、エミュレータを使用するテストを作成したいが、UIテストを書く必要はありません。

このようなことはありますか?

答えて

2

あなたがしようとしているのは、ネットワークコンポーネントがサーバーに適切なデータを送信し、適切な応答を処理することを検証することだけです。この種のテストでは、Robolectricがニーズに合っていると思います。それはあなたのコンポーネントに注入することができるあなたのアプリのコンテキストを埋めることができるはずです。インストルメンテーションテストよりもはるかに高速なJUnitフレームワークを実行しながら、すべて

あなたがしようとしているのは、ネットワークコンポーネントが動作していることを確認することです。その後、実際にはAndroidフレームワークは必要ないかもしれません。代わりに純粋なJavaを使用してクラスを書き換えることができます。必要な項目をContextから取り除き、それらをクラスに挿入してください。次に、デバイスではなくコンピュータ上で動作するJUnitテストフレームワークを使用できます。それはずっと速く、電話を必要としません。これは、DrawableなどのAndroid固有のコンポーネントでない限り動作します。これは、Googleサービスが必要な場合にも機能しません。

MockitoPowerMockを使用してContext and Play Servicesのメソッドをモックするのが非常に面倒な方法です。 Contextクラスが使用するメソッドをモックするだけです。しかし、これは本当に複雑になる可能性があります。あなたはRobolectricと一緒にこれを使うことができるので、模擬する必要があるものだけを模擬する必要があります。

統合テストに関しては、統合テストを書くときにUIテストを書く必要はありません。基本的に統合テストが行​​うことは、電話で動作するテストアプリケーションを作成することです。 UIを提供しない場合は、UIは使用しません。テストが実行されている間は空白の画面が表示されます。 InstrumentationRegistery#getContext()を使用すると、アプリケーションで使用されているコンテキストを取得できます。次に、必要なコンポーネントにコンテキストを挿入します。

これは時には痛みでもあり、UIがなくても計測テストに時間がかかることがあります。しかし、実際のGoogleサービスで実際のAndroidコンテキストで動作することを確認したい場合は、これが最善の方法です。

基本的な戦略は、JUnitフレームワークでRobolectricを使用して、大量の小型で高速な単体テストを作成することです。そして、計装フレームワークを使って包括的な検証テストを書いて、すべてがうまく機能することを確認します。

+0

@DeeVありがとうございます。あなたはそれを完全に記述しましたが、私はそれには簡単に答えることはできないと考えています。私はおそらくUIなしでInstrumentation 1を使用し、それがどのようになるかを見ていきます。 – Zis

関連する問題