私が robolectric で抱えている問題は、実際の HttpRequests を作成しないことです。
robolectric の HttpClient 実装を、実際にローカル テスト サーバーへの呼び出しを行う実際のものに置き換えることはできますか?
私が robolectric で抱えている問題は、実際の HttpRequests を作成しないことです。
robolectric の HttpClient 実装を、実際にローカル テスト サーバーへの呼び出しを行う実際のものに置き換えることはできますか?
Jan Berkel がRobolectric にプル リクエストを送信し、3 月 8 日に master にマージされました。テストの最初に呼び出しRobolectric.getFakeHttpLayer().interceptHttpRequests(false);
て、Robolectric でモックされた http レイヤーをバイパスできるようになりました。
jar をSonatypeから直接ダウンロードして、Eclipse Android プロジェクトに含めることができます。Maven を使用していて、1.1 がまだリリースされていない場合 (上記の Sonatype の URL を確認してください)、sonatype スナップショット リポジトリを追加し、robolectric 1.1-SNAPSHOT を使用する必要があります。これを行うには、pom.xml に以下を追加します。
<repositories>
<repository>
<id>sonatype-snapshots</id>
<name>Sonatype Snapshots</name>
<layout>default</layout>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
...
<dependencies>
<dependency>
<groupId>com.pivotallabs</groupId>
<artifactId>robolectric</artifactId>
<version>1.1-SNAPSHOT</version>
<scope>test</scope>
</dependency>
...
</dependencies>
これを実際のサーバーに対して実行する統合テストに使用していますが、うまく機能します。
基本的にはしません。Robolectric はテスト フレームワークであり、これが動作するように設計された方法です。あなたが尋ねたのは、私たちが Robolectric で行うことではありません。
Robolectricテスト HTTP リクエストの使用について説明しているこのブログにたどり着いたと思います。実際、「HTTP リクエストをテストする方法」というタイトルは、正確な IMO ではありません。このブログで述べられているように、 「HTTP リクエストをモックする方法」と呼びたいと思います。Robolectric モック http リクエストを使用するのに最適な場所は、おそらくプロジェクトの開発/テスト中に、リモート サーバーへの実際のネットワーク呼び出しを本当に煩わせたくない場合です。段階。
何らかの操作のために銀行口座に接続するメイン アクティビティがあるとします。送信ボタンは、入力情報をリモート サーバーに投稿してアカウント情報を更新し、さまざまな応答に基づいていくつかの異なるアクティビティに移動します。HttpClient、送信ボタン付きのフォーム、次のアクティビティへの新しい意図など、すべてのコードをスムーズに記述しました。そうです、送信ボタンをクリックしたときにテストするにはどうすればよいですか。アクティビティのソースコードを変更したり、実際のネットワーク呼び出しを使用して実際の銀行口座を台無しにしたりすることなく、これらのさまざまな応答に基づいて適切なアクティビティが開かれます。答えは Robolectric モック http リクエストです。この場合、Robolectric を使用する重要なポイントは、実際の http 要求をテストするためではなく、httpClient コードをだまして、UI などのアプリケーション コードの他の部分をテストするために使用されます。最終的に、
Robolectirc チームが主張するもう 1 つの利点は、エミュレーターまたはデバイスでインストルメンテーション テストを開始する必要がないことです。これは非効率的であり、アプリケーションの開発/テストのライフ サイクルを遅くします。