2013-09-02 4 views
14

Próbuję przetestować klasę dostawca openid. Otwarta klasa konsumenta tworzy żądanie http. Szydzę z odpowiedzi na to żądanie za pomocą drutu. Próbuję wyśmiać poprawną odpowiedź typu openid. Jednak poprawna odpowiedź zależy od parametrów żądania. Korzystając z wiremocka, mogę ustawić fałszywe żądanie, w którym treść odpowiedzi zależy od parametrów żądania?Korzystanie z wiremock, czy mogę zwrócić ciało, które jest zależne od post request

Odpowiedz

0

Nigdy nie używałam drutu. Ale zgodnie z ich online documentation można napisać próbę, która pasuje do parametrów adresu URL i żądania. Więc powinieneś być w stanie zwrócić różne mocks w zależności od parametrów w samym URL lub osadzonych w treści żądania.

+0

Muszę zweryfikować podpis cyfrowy adresu URL dla żądania otwarcia. Nie sądzę, że to zadziała, więc zajrzę do innego serwera http java, aby to zrobić. –

2

O ile wiem i moje doświadczenia z WireMock, nie.

Nie można sparametryzować odpowiedzi za pomocą argumentów przekazanych przez żądanie. Najlepsze, co możesz zrobić, to użyć dopasowań, aby twój kpiący serwer odpowiednio zareagował.

Zalecam wykonanie pewnych testów jednostkowych lub integracyjnych za pomocą zwykłego jUnit w celu przetestowania żądań/odpowiedzi w takich przypadkach. Powinny one być szybsze, jeśli chcesz przetestować, czy żądania odbioru są prawidłowe. Widzę WireMock jako alternatywę dla testu akceptacji, aby upewnić się, że twój interfejs z innymi usługami REST nie zostanie zerwany.

1

Sprawdziłem to trochę, a odpowiedź brzmi "nie" (na dzisiaj).

Należy ustawić określoną (statyczną) odpowiedź dla każdego żądania, które wymaga unikalnej odpowiedzi.

5

Jest to możliwe, wystarczy skorzystać z ResponseTansformer. W poniższym przykładowym kodzie parametr ResponseDefinition jest określany przez skrótowy podany poniżej. Tutaj kpię z usługi kodowania, po prostu zwracając bajty ciała z powrotem do dzwoniącego. Chociaż w transformatorze mogę zwrócić to, co mi się podoba w oparciu o treść zapytania.

int port = 8080; 
WireMockServer wireMockServer = new WireMockServer(new WireMockConfiguration().port(port).extensions(new ResponseTransformer() { 
    @Override 
    public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource files) { 
     return new ResponseDefinitionBuilder().like(responseDefinition) 
       .withBody(request.getBodyAsString().getBytes()) 
       .build(); 
    } 

    @Override 
    public String name() { 
     return "request body returning request transformer"; 
    } 
})); 
wireMockServer.start(); 
WireMock.configureFor("localhost", port); 

stubFor(post(urlEqualTo("/encode")) 
     .willReturn(aResponse() 
       .withHeader("Content-Type", "application/octet-stream") 
       .withStatus(200))); 

stubFor(post(urlEqualTo("/decode")) 
     .willReturn(aResponse() 
       .withHeader("Content-Type", "application/octet-stream") 
       .withStatus(200))); 
5

Wiremock obsługuje rozszerzenia, które można napisać samemu, który działa jako middleware używany do przechwycenia żądania i odpowiedzi ciała, dzięki czemu można sformatować go jednak chcesz. Jest bardzo elastyczny i umożliwia dynamiczne tworzenie nowych ciał odpowiedzi lub nawet brak odpowiedzi.

Jako przykład, napisaliśmy przedłużenie tego w Opentable i otworzyliśmy go na Maven Central. Pozwala to traktować atrybuty json jako zmienne i interpolować je w swoje ciało odpowiedzi. Sprawdź to. Daj nam znać, jak to działa lub jeśli masz jakieś pytania. https://github.com/opentable/wiremock-body-transformer

Powiązane problemy