저는 REST 서비스에서 PNG 이미지를 다운로드하여 Bitmap
으로 변형하고이 라이브러리를 사용하여 앱으로 반환해야하는 Android 라이브러리 프로젝트에서 작업하고 있습니다. 따라서 PNG 이미지의 바이트를 반환하는 REST 웹 서비스가 있습니다. 우리는 Retrofit
과 rxJava
을 사용하여이 서비스를 호출합니다. 아래 코드 내 accessRemoteComm.getImage()
에서 ResponseBody
에서 Bitmap
으로 Observable의 .map
내부로 로딩하고 변환합니다. 응용 프로그램에서 이미지가 잘로드됩니다. 이제 단위 테스트를하고 싶지만, 처음에는 이미지를 전달하기가 어려워요. MockWebServer
.어떻게 OkHttpClient MockWebSever를 사용하여 이미지/바이트 []를 반환 할 수 있습니까?
개조 인터페이스 :
@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() 방법 :
을java.lang.RuntimeException: Method decodeStream in android.graphics.BitmapFactory not mocked. See http://g.co/androidstudio/not-mocked for details.
이것은 내가 지금까지 가지고있는 경우 : OnError
는 끊임없이라고
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
제대로 설치하지 않는 것을 확신합니다. 그러나 Buffer
을 본문으로 사용하는 MockResponse
의 사용을 보여주는 SO 또는 웹상의 자원을 찾을 수 없습니다. 그리고 이것이 도움이되는 부분입니다. 어떻게 이것을 올바르게 설정합니까?
btw. 이 테스트 방법에 대한 다른 제안 사항이 있으면 알려 주시기 바랍니다.
감사합니다.