Jaki jest najlepszy sposób na sfałszowanie serwera do testowania przy użyciu kwadratowej struktury modernizacji .
Potencjalne sposoby:
Utwórz nowego klienta do modernizacji i ustaw go w RestAdapter.Builder (). SetClient (). Obejmuje to przeanalizowanie obiektu Request i zwrócenie json jako obiektu Response.
Zaimplementuj ten interfejs z adnotacjami jako klasę pozorowaną i użyj jej zamiast wersji dostarczonej przez RestAdapter.create () (nie będzie testować serializacji gson)
?
Idealnie byłoby, gdyby symulowany serwer zapewniał odpowiedzi json, aby móc testować serializację gson w tym samym czasie.
Wszelkie przykłady byłyby bardzo mile widziane.
square-oss
? Wydaje się zbędne, biorąc pod uwagęretrofit
.Odpowiedzi:
Mock Retrofit 2.0 Requests for Testing
Ponieważ stare mechanizmy, takie jak tworzenie
MockClient
klasy i implementacja jej z poziomu,Client
nie działają już z Retrofit 2.0, tutaj opiszę nowy sposób robienia tego. Wszystko, co musisz teraz zrobić, to dodać niestandardowe przechwytywacze dla OkHttpClient, jak pokazano poniżej .FakeInterceptor
klasa po prostu przesłaniaintercept
metodę iw przypadku gdy aplikacja jest wDEBUG
trybie zwraca podany JSON.RestClient.java
IRestService.java
FakeInterceptor.java
Kod źródłowy projektu na GitHub
źródło
uri()
podchain.request().uri()
(naprawiłem to,String url = chain.request().url().toString();
ponieważ mój przypadek jest inny). 2- Dostajęjava.lang.IllegalStateException: network interceptor my.package.name.FakeInterceptor must call proceed() exactly once
. Dodałem toaddNetworkInterceptor()
raczej do niżaddInterceptor()
.Postanowiłem wypróbować metodę 1 w następujący sposób
I używając go przez:
Działa dobrze i pozwala przetestować ciągi json bez konieczności kontaktowania się z prawdziwym serwerem!
źródło
IllegalArgumentException url == null
z Retrofit 1.4.1.builder.setEndpoint("http://mockserver.com").setClient(new MockClient());
Testowanie deserializacji JSON na twoich obiektach (prawdopodobnie z
TypeAdapters
?) Wydaje się osobnym problemem, który wymaga oddzielnych testów jednostkowych.Osobiście używam wersji 2. Zapewnia bezpieczny dla typu, przyjazny dla refaktorów kod, który można łatwo debugować i zmienić. W końcu, po co deklarować swoje API jako interfejsy, jeśli nie tworzysz ich alternatywnych wersji do testowania! Polimorfizm do zwycięstwa.
Inną opcją jest użycie języka Java
Proxy
. W ten sposób Retrofit (obecnie) implementuje swoją podstawową interakcję HTTP. Będzie to wymagało co prawda więcej pracy, ale pozwoliłoby na znacznie bardziej dynamiczne makiety.źródło
Możesz także użyć czegoś takiego jak Webservermock firmy Squareup! -> https://github.com/square/okhttp/tree/master/mockwebserver
źródło
Jestem wielkim fanem Apiary.io za kpiny z API przed przejściem na prawdziwy serwer.
Możesz także użyć płaskich plików .json i odczytać je z systemu plików.
Możesz także użyć publicznie dostępnych API, takich jak Twitter, Flickr itp.
Oto kilka innych przydatnych zasobów dotyczących modernizacji.
Prezentacje: https://docs.google.com/presentation/d/12Eb8OPI0PDisCjWne9-0qlXvp_-R4HmqVCjigOIgwfY/edit#slide=id.p
Wideo: http://www.youtube.com/watch?v=UtM06W51pPw&feature=g-user-u
Przykładowy projekt: https://github.com/dustin-graham/ucad_twitter_retrofit_sample
źródło
Mockery (zastrzeżenie: jestem autorem) zostało zaprojektowane właśnie do tego właśnie zadania.
Mockery to biblioteka do próbowania / testowania, która koncentruje się na weryfikacji warstw sieciowych z wbudowaną obsługą modernizacji. Automatycznie generuje testy JUnit na podstawie specyfikacji danego interfejsu API. Chodzi o to, aby nie musieć ręcznie pisać żadnego testu; ani implementacja interfejsów do naśladowania odpowiedzi serwera.
źródło
Najpierw utwórz interfejs modernizacji.
Twój wnioskodawca obserwuje:
Jeśli korzystasz z drugiego wyboru (użyj interfejsu Retrofit do danych serwera Mock), musisz MockRetrofit, użyj następującego kodu:
Moje dane pochodzą z pliku aktywów (Asset / server / EventList.json), zawartość tego pliku to:
Jeśli używasz przechwytywacza okhttp3, musisz samodzielnie zdefiniować przechwytywacz, na przykład:
6. Na koniec możesz zażądać serwera z kodem:
Dziękuje za przeczytanie.
źródło
Dodając do odpowiedzi @Alec, rozszerzyłem klienta próbnego, aby uzyskać odpowiedź bezpośrednio z pliku tekstowego w folderze zasobów w zależności od adresu URL żądania.
Dawny
W tym przypadku klient pozorowany rozumie, że uruchamiany adres URL jest aktywowany i szuka pliku o nazwie activ.txt w folderze zasobów. Odczytuje zawartość z pliku asset / activ.txt i wysyła ją jako odpowiedź do API.
Oto rozszerzenie
MockClient
Szczegółowe wyjaśnienie można znaleźć na moim blogu
http://www.cumulations.com/blogs/13/Mock-API-response-in-Retrofit-using-custom-clients
źródło
MockClient
Podałem statyczną nazwę pliku, w moim pliku napisałem klasę testową za pomocą robolectric. Ale nie mogę uzyskać żadnej odpowiedzi z pliku json.JSONPlaceholder: fałszywy interfejs API REST online do testowania i prototypowania
https://jsonplaceholder.typicode.com/
ReqresIn: inny interfejs API REST online
https://reqres.in/
Serwer próbny listonosza
Jeśli chcesz przetestować ładunek odpowiedzi niestandardowej, powyższe dwa mogą nie odpowiadać Twoim wymaganiom, możesz wypróbować serwer próbny listonosza. Definiowanie własnych żądań i odpowiedzi jest dość łatwe w konfiguracji i elastyczne.
https://learning.getpostman.com/docs/postman/mock_servers/intro_to_mock_servers/ https://youtu.be/shYn3Ys3ygE
źródło
Mockowanie wywołań interfejsu API za pomocą funkcji Retrofit jest teraz jeszcze łatwiejsze dzięki Mockinizerowi, który sprawia, że praca z MockWebServer jest naprawdę prosta:
Po prostu utwórz mapę RequestFilter i MockResponses, a następnie podłącz ją do łańcucha konstruktorów OkHttpClient:
Nie musisz martwić się konfiguracją MockWebServer itp. Po prostu dodaj swoje makiety, cała reszta zostanie wykonana przez Mockinizer za Ciebie.
(Zastrzeżenie: jestem autorem Mockinizera)
źródło
Dla mnie niestandardowy klient retrofitu jest świetny ze względu na elastyczność. Zwłaszcza gdy używasz dowolnego frameworka DI, możesz szybko i prosto włączyć / wyłączyć makietę. Używam niestandardowego klienta dostarczonego przez Dagger również w testach jednostkowych i integracyjnych.
Edycja: tutaj znajdziesz przykład kpiącej modernizacji https://github.com/pawelByszewski/retrofitmock
źródło