2016-10-14 6 views
15

데이터 기반 Android 앱이 있습니다. 100 % 적용 범위를 목표로 테스트를 추가합니다. OkHttp을 사용하십시오.Android에서 오프라인으로 서버 응답을 테스트 할 수있는 투명 프록시

모의 응답으로 내 서버에 대한 호출을 어떻게 투명하게 가로채는가?

end-to-end 및 단위 테스트를 원합니다. 예 : 빌드 유형을 MockServer으로 설정하면 에뮬레이터에서 모의 ​​응답을 표시하는 앱을로드해야합니다.

+0

흠, [모의 서버] (http://www.mock-server.com)가 내가 원하는 것일 수 있습니다. –

+0

가장 가까운 웹 사이트는 (TypeScript/JavaScript, Angular 2) 웹 세계에서 [각도/메모리 웹 api] (https://github.com/angular/in-memory-web-api)였습니다. . 그 예는 부족합니다. HTTP 동사 전체에서 CRUD가 지원되는지 여부는 알 수 있습니다. –

답변

1

okhttp mockwebserver을 살펴 보았습니까?

응답을 조롱하고 요청을 확인/표시하는 데 사용합니다.

빌드 유형에 이것을 사용하려면 gradle에서 Android 리소스 또는 java 상수를 생성 한 다음 서버를 시작하고 이에 따라 경로를 설정할 수 있습니다.

+0

고마워요. 그러나 충분히 멀리 가지 않는 것 같습니다. 단위 테스트에만 유용하며, e2e 및 라이브 앱 (백엔드 없음) 테스트에는 유용하지 않습니다. –

0

단위 테스트의 경우 OkHttp 사용을 격리하는 방식으로 코드를 작성할 수 있어야합니다. 이렇게하면 클라이언트를 조롱하고 (Mockito 같은 것을 사용) 원하는대로 작동하게 할 수 있습니다. 결국, 단위 테스트에서는 하나의 코드 만 테스트하고 종속성은 테스트하지 않을 것입니다.

Java에서 이와 비슷한 것입니다. (다른 언급이) 마찬가지로, 패턴이 가장 좋은 것 같아요 mockwebserver 통합 테스트, 들어

public class ClassUnderTest { 

    private final OkHttpClient client; 

    public ClassUnderTest(OkHttpClient client) { 
     this.client = client; 
    } 
    // Other code... 
} 

// In your tests 
OkHttpClient mockClient = mock(OkHttpClient.class); 
when(mockClient.newCall(any(Request.class)).thenThrow(...); 
ClassUnderTest testClass = new ClassUnderTest(mockClient); 

verify(mockClient).doSomething(); 

(자바 스크립트와 같은) 다른 곳에서 사용할 수 있습니다.

+0

고마워요. 그러나 충분히 멀리 가지 않는 것 같습니다. 단위 테스트에만 유용하며, e2e 및 라이브 앱 (백엔드 없음) 테스트에는 유용하지 않습니다. –