내가 Robolectric
의 FakeHttpLayer
을 확인했습니다와 IOException
을 던지는 시뮬레이션하는 방법을 발견하지 않았습니다 감사드립니다.
그래서 조롱을 사용하면 효과가 있습니다. 먼저 HttpClientFactory
를 소개합니다 (당신이 HttpClient
를 사용하는 경우, 당신은 HttpUrlConnection
을 위해 같은 방법을 사용할 수 있습니다) 대신 생성자의 네트워킹 레이어를 사용 공장에서
public class HttpClientFactory {
public HttpClient createClient() {
return new DefaultHttpClient();
}
}
이제을 (단순화를 위해 할 생각이 동기입니다) :
public class HttpTransportLayer {
private final HttpClientFactory clientFactory;
public HttpTransportLayer() {
this(new HttpClientFactory());
}
// For tests only
HttpTransportLayer(HttpClientFactory clientFactory) {
this.clientFactory = clientFactory;
}
public String requestData(String url) {
HttpClient client = factory.createClient();
...
}
}
그래서 지금 당신은 테스트 Mockito
사용할 수 있습니다에서 : 더미 테스트 및 우리를이다
HttpClient mockedClient = mock(HttpClient.class);
@Before
public void setUp() {
HttpClientFactory factory = mock(HttpClientFactory.class);
when(factory.createClient()).thenReturn(mockedClient);
target = new HttpTransportLayer(factory);
}
@Test
public void whenIOExceptionThenReturnNull() {
when(mockedClient.execute(any(HtptUriRequest.class))).thenThrow(new IOException());
String data = target.requestData("http://google.com");
assertThat(data).isNull();
}
아무도 오류가 발생하면 null을 반환합니다.
주입 코드를 최소화하기 위해 Dagger
과 같은 종속성 주입 프레임 워크를 살펴볼 수도 있습니다.
Retrofit
또는 Volley
과 같은 네트워킹을위한 좋은 프레임 워크를 사용하는 경우 더 단순합니다. 아무 것도 조롱하거나 오류 콜백을 호출 할 필요가 없습니다.
희망 하시겠습니까?
힌트를 보내 주셔서 감사합니다. Factory, Dagger와 HttpClient 구현을 결합하여 나를 도와주었습니다 :) – elCapitano
공유 주셔서 감사합니다 –