Napisałem kod, który wywołuje API klienta z Jersey, które z kolei wywołuje usługę internetową, która jest poza moją kontrolą. Nie chcę, aby mój test jednostki wywoływał rzeczywistą usługę sieciową.Jak mogę sprawdzić kod jednostki, który wywołuje interfejs API klienta Jersey?
Jakie jest najlepsze podejście do pisania testu jednostkowego dla kodu wywołującego interfejs API klienta Jersey? Czy powinienem używać interfejsu API serwera Jersey, aby napisać usługę WWW JAX-RS, a następnie użyć testowej platformy testowej do testowania urządzenia? A może powinienem wyśmiewać połączenia z serwisem w Jersey? Mam dostęp do JMock. Czy powinienem spróbować innego podejścia?
Podczas moich badań znalazłem this discussion opisujący różne opcje, ale znalazłem kompletne rozwiązanie. Czy są dostępne przykłady kodu pokazujące sugerowane podejście JUnit? Nie mogłem znaleźć żadnej dokumentacji z Jersey.
Oto odpowiedni kod źródłowy:
public String getResult(URI uri) throws Exception {
// error handling code removed for clarity
ClientConfig clientConfig = new DefaultClientConfig();
Client client = Client.create(clientConfig);
WebResource service = client.resource(uri);
String result = service.accept(accept).get(String.class);
return result;
}
Oto przykłady kodu testu chciałbym przekazać. Chciałbym przetestować (1) przekazanie prawidłowego identyfikatora URI i otrzymanie prawidłowego ciągu wstecz oraz (2) przekazanie nieprawidłowego (z jakiegokolwiek powodu - nieosiągalnego lub nieautoryzowanego) identyfikatora URI i odzyskanie wyjątku. powyżej
@Test
public void testGetResult_ValidUri() throws Exception {
String xml = retriever.getResult(VALID_URI);
Assert.assertFalse(StringUtils.isBlank(xml));
}
@Test(expected = IllegalArgumentException.class)
public void testGetResult_InvalidUri() throws Exception {
retriever.getResult(INVALID_URI);
}
Wszystko jest prosty opis tego, co robi mój kod. W rzeczywistości na wierzchu znajduje się warstwa, która akceptuje dwa identyfikatory URI, najpierw próbuje wywołać pierwszy identyfikator URI, a jeśli ten identyfikator URI nie powiedzie się, próbuje wywołać drugi identyfikator URI. Chciałbym mieć testy jednostkowe obejmujące (1) pierwszy URI się powiedzie, (2) pierwszy URI się nie udał, a drugi URI się powiódł i (3) oba URI uległy awarii. Ten kod jest wystarczająco złożony, że chcę przetestować te różne scenariusze przy użyciu JUnit, ale aby to zrobić, muszę uruchomić rzeczywiste autonomiczne usługi sieciowe lub wyszydzić wywołania interfejsu API klienta Jersey.
Co dokładnie chcesz przetestować w tej metodzie? Jakie są krytyczki, ten test jest zaliczony? – dbf
Cóż, jeśli chcesz wykonać test jednostkowy, musisz mieć odpowiednie usługi funkcjonalne. – iDroid
@dbf Zaktualizowałem pytanie, które chcę przetestować (1) przekazanie w poprawnym URI i otrzymanie prawidłowego ciągu wstecz i (2) przekazanie nieważnego (z jakiegokolwiek powodu - nieosiągalnego lub nieautoryzowanego) URI i uzyskanie wyjątku plecy. – BennyMcBenBen