2016-10-14 45 views
15

Mam rusztowanie aplikacji Android oparte na danych. Dodanie testów, dążących do 100% pokrycia. Korzystanie z OkHttp.Przejrzyste proxy do testowania odpowiedzi serwera offline w systemie Android

Jak w sposób przezroczysty przechwytywać połączenia z serwerem za pomocą fałszywych odpowiedzi?

Chcesz tego typu testy od końca do końca, a także od jednostki. Np .: ustawienie typu kompilacji na MockServer powinno załadować aplikację, która pokaże fałszywe odpowiedzi w emulatorze.

+0

Hmm, [fałszywy serwer] (http://www.mock-server.com) może być tym, czego szukam. –

+0

Najbliżej znalazłem ["kątowe/w pamięci-web-api"] (https://github.com/angular/in-memory-web-api) w świecie Internetu (TypeScript/JavaScript, Angular 2) . Jej przykładów brakuje, dobrze byłoby wiedzieć, czy obsługuje pełne CRUD przez czasowniki HTTP. –

Odpowiedz

1

Czy spojrzałeś w okhttp mockwebserver?

Używam go do kpienia z odpowiedzi i weryfikowania/pokazywania żądań.

Jeśli chcesz użyć tego z typem kompilacji, możesz wygenerować zasób Androida lub stałą java w gradle, a następnie uruchomić serwer i odpowiednio ustawić ścieżkę.

+0

Dzięki, ale wydaje się, że nie idzie wystarczająco daleko. Jest przydatny tylko do testów jednostkowych, a nie do testów e2e i live-app [bez backendu]. –

0

Dla testów jednostkowych powinieneś być w stanie napisać swój kod w taki sposób, aby odizolować użycie OkHttp. Robiąc to, możesz wyśmiewać klienta (używając czegoś takiego jak Mockito) i zachowywać się tak, jak chcesz. Wszakże w teście jednostkowym chcemy przetestować tylko jeden fragment kodu, a nie jego zależności.

Coś takiego w Javie. Podobnie wzór działa gdzie indziej (jak JavaScript)

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(); 

do testów integracyjnych, mockwebserver wydaje się być najlepszym (jak wspominają inni).

+0

Dzięki, ale to nie wydaje się wystarczać. Jest przydatny tylko do testów jednostkowych, a nie do testów e2e i live-app [bez backendu]. –