私は、REST サービスから PNG 画像をダウンロードし、それを に変換して、Bitmap
このライブラリを使用してアプリに返す必要がある Android ライブラリ プロジェクトに取り組んでいます。したがって、png 画像のバイトを返す REST Web サービスがあります。Retrofit
withを使用してこのサービスを呼び出していますrxJava
。以下のコードでは、Observableの aから aへaccessRemoteComm.getImage()
の読み込みと変換を行います。画像はアプリケーションに正常に読み込まれます。その方法を単体テストしたいのですが、そもそも画像を配信するのに苦労しています。は、次のように常に呼び出されます。ResponseBody
Bitmap
.map
MockWebServer
OnError
java.lang.RuntimeException: Method decodeStream in android.graphics.BitmapFactory not mocked. See http://g.co/androidstudio/not-mocked for details.
これは私がこれまでに持っているものです:
後付けインターフェース:
@GET("webapi/user/{ID}/image")
Observable<ResponseBody> getVehicleImage(
@Path("ID") @NonNull final String id,
@Query("width") @NonNull final int width,
@Query("height") @NonNull final int height,
@Query("view") @NonNull final ImageView view
);
getImage() メソッド:
public Observable<Bitmap> getVehicleImage(@NonNull String id, @NonNull Integer width, @NonNull Integer height, @NonNull ImageView view) {
return service.getImage(id, width, height, view).map(new Func1<ResponseBody, Bitmap>() {
@Override
public Bitmap call(ResponseBody responseBody) {
BufferedInputStream isr = new BufferedInputStream(responseBody.byteStream());
return BitmapFactory.decodeStream(isr);
}
});
}
私のテスト方法:
@Test
public void testGetVehicleImage() throws Exception {
String path = basePathForImages + "vehicleTestImage.png";
Source pngSource = Okio.source(new File(path));
BufferedSource bufferedSrc = Okio.buffer(pngSource);
server.enqueue(new MockResponse()
.setResponseCode(200)
.setHeader("Content-Type", "image/png")
.setBody(bufferedSrc.buffer()));
Subscriber<Bitmap> subscriber = new Subscriber<Bitmap>() {
@Override
public void onCompleted() {
Log.d("OnComplete");
}
@Override
public void onError(Throwable e) {
Log.d(e.toString());
//java.lang.RuntimeException:
//Method decodeStream in android.graphics.BitmapFactory not mocked.
}
@Override
public void onNext(Bitmap bitmap) {
Log.d("Yeeee");
}
};
Observable<Bitmap> observable = accessRemoteCommVehicle.getVehicleImage("abc", 0, 0, VehicleImageView.FRONT);
observable.toBlocking().subscribe(subscriber);
}
bufferedSource
正しくセットアップしていないことは確かです。MockResponse
しかし、SO や WebでBuffer
as bodyの使用法を示すリソースが見つかりません。そして、これは、助けがあればありがたい部分です。これを正しく設定するにはどうすればよいですか?
ところで。これをテストする方法について他に提案がある場合は、お知らせください。
ありがとうございました!