[JAVA] Verschiedene Methodentests mit MockRestServiceServer

Was ist MockRestServiceServer?

――Es gibt viele wundervolle Artikel, also schauen Sie sie sich bitte an. - https://qiita.com/kazuki43zoo/items/fa9fea1c813f76080fe7 - https://qiita.com/yoshidasts/items/fd4e1f4434e3b6f40880

Ich werde den Code hier als Beispiel belassen.

Es ist möglich, die URL, Anforderungsinhalte, Header und Methoden, die aufgerufen werden sollen, mit "MockRestServiceServer" festzulegen. Wenn der Aufruf nicht korrekt erfolgt, erhalten Sie "java.lang.AssertionError".

Mit "MockRestServiceServer.createServer" erstellt, können Sie mit "andExpect" den Inhalt, die Header usw. der Anforderung detailliert festlegen. Alle hier festgelegten Inhalte von andExpect sind die von org.springframework.test.web.client.match.MockRestRequestMatchers.

static import

example.java



import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.*;
import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;

GET

example.java


    @Test
    public void GetExample() {
        //Antwort zurückgegeben
        String jsonResponseBody = "{\"id\": 99999,\"name\": \"exampleUser\"}";

        //Voraussichtliches Ergebnis
        User expectUser = new User() {{
            setId(99999);
            setName("exampleUser");
        }};

        //Erwartete URL zum Aufrufen
        String callEndpoint = "https://get-end-point-url";

        // create MockRestServiceServer
        MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
        mockServer
            .expect(requestTo(callEndpoint))
            .andExpect(method(HttpMethod.GET))
            .andRespond(withSuccess(jsonResponseBody, MediaType.APPLICATION_JSON_UTF8));

        //Bereit zum Anrufen
        URI url = UriComponentsBuilder.fromHttpUrl(callEndpoint).build().toUri();
        HttpHeaders headers = new HttpHeaders();
        
        //Wird tatsächlich mit restTemplate aufgerufen
        ResponseEntity<User> responseEntity = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity(null, headers), User.class);
        User responseUser = responseEntity.getBody();
        
        assertThat(responseUser.getId(), is(expectUser.getId()));
        assertThat(responseUser.getName(), is(expectUser.getName()));
    }

POST

example.java


    @Test
    public void PostExample() {
        //Antwort zurückgegeben
        String jsonResponseBody = "{\"id\": 99999}";

        //Erwarteter Anfragetext
        String jsonRequestBody = "{\"name\":\"example man\",\"email\":\"[email protected]\",\"gender\":1}";

        //Voraussichtliches Ergebnis
        User expectUser = new User() {{
            setId(99999);
        }};

        //URL zum Anrufen
        String callEndpoint = "https://post-end-point-url";

        // create MockRestServiceServer
        MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
        mockServer
            .expect(requestTo(callEndpoint))
            .andExpect(method(HttpMethod.POST))
            //Überprüfung des Inhalts des Anforderungsheaders
            .andExpect(content().string(jsonRequestBody))
            .andRespond(withSuccess(jsonResponseBody, MediaType.APPLICATION_JSON_UTF8));

        //Bereit zum Anrufen
        URI url = UriComponentsBuilder.fromHttpUrl(callEndpoint).build().toUri();
        HttpHeaders headers = new HttpHeaders();

        // RequestBody
        ExamplePostRequest exampleRequest = new ExamplePostRequest() {{
            setName("example man");
            setEmail("[email protected]");
            setGender(MALE);
        }};
        ResponseEntity<User> responseEntity = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity(exampleRequest, headers), User.class);
        User responseUser = responseEntity.getBody();
        assertThat(responseUser.getId(), is(expectUser.getId()));
    }

PUT

example.java



    @Test
    public void PutExample(){

        //Antwort zurückgegeben
        String jsonResponseBody = "";

        //Erwarteter Anfragetext
        String jsonRequestBody = "{\"name\":\"example man\",\"email\":\"[email protected]\",\"gender\":1}";

        //URL zum Anrufen
        String callEndpoint = "https://put-end-point-url";

        //Header
        HttpHeaders headers = new HttpHeaders();
        String exampleToken = String.format("Bearer %s", "EXAMPLE_BEARER_TOKEN");
        headers.add("Authorization", exampleToken);

        MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
        mockServer
            .expect(requestTo(callEndpoint))
            .andExpect(method(HttpMethod.POST))
            //Überprüfung des Inhalts des Anforderungsheaders
            .andExpect(header("Authorization", exampleToken))
            //Überprüfung des Inhalts des Anforderungskörpers
            .andExpect(content().string(jsonRequestBody))
            .andRespond(withSuccess(jsonResponseBody, MediaType.APPLICATION_JSON_UTF8));

        URI url = UriComponentsBuilder.fromHttpUrl(callEndpoint).build().toUri();

        // RequestBody
        ExamplePostRequest exampleRequest = new ExamplePostRequest() {{
            setName("example man");
            setEmail("[email protected]");
            setGender(MALE);
        }};
        //Wenn Header oder exampleRequest auf null zurückgegeben werden, wird es nicht korrekt aufgerufen, also Java.lang.AssertionError
        restTemplate.exchange(url, HttpMethod.POST, new HttpEntity(exampleRequest, headers), User.class);
    }

Recommended Posts

Verschiedene Methodentests mit MockRestServiceServer
Verschiedene GraphQL-Tests
Wie man ganze Zahlen mit Rubin überprüft
Bedingte Verzweigung mit Hilfsmethode
[ruby] Eine Methode mit einem Argument aufrufen
Java Unit Test mit Mockito
Simulieren Sie die Simplex-Methode mit der GUI
Einführung in Algorithmen mit der Java-Shakutori-Methode
Verschiedene verwirrende Geschichten mit Map # computeIfAbsent