[JAVA] Différents tests de méthode avec MockRestServiceServer

Qu'est-ce que MockRestServiceServer?

――Il existe de nombreux articles merveilleux, veuillez donc les consulter. - https://qiita.com/kazuki43zoo/items/fa9fea1c813f76080fe7 - https://qiita.com/yoshidasts/items/fd4e1f4434e3b6f40880

Je vais laisser le code ici à titre d'exemple.

Il est possible de définir l'URL, le contenu de la requête, les en-têtes et les méthodes qui doivent être appelés en utilisant MockRestServiceServer. Si l'appel n'est pas effectué correctement, vous obtiendrez java.lang.AssertionError.

Il peut être créé avec MockRestServiceServer.createServer, et le contenu de la requête, les en-têtes, etc. peuvent être définis en détail en utilisant ʻandExpect. Tout le contenu de ʻandExpect défini ici est celui de ʻ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() {
        //Réponse retournée
        String jsonResponseBody = "{\"id\": 99999,\"name\": \"exampleUser\"}";

        //Résultat prospectif
        User expectUser = new User() {{
            setId(99999);
            setName("exampleUser");
        }};

        //URL à appeler attendue
        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));

        //Prêt à appeler
        URI url = UriComponentsBuilder.fromHttpUrl(callEndpoint).build().toUri();
        HttpHeaders headers = new HttpHeaders();
        
        //En fait appelé avec restTemplate
        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() {
        //Réponse retournée
        String jsonResponseBody = "{\"id\": 99999}";

        //Corps de demande attendu
        String jsonRequestBody = "{\"name\":\"example man\",\"email\":\"[email protected]\",\"gender\":1}";

        //Résultat prospectif
        User expectUser = new User() {{
            setId(99999);
        }};

        //URL à appeler
        String callEndpoint = "https://post-end-point-url";

        // create MockRestServiceServer
        MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
        mockServer
            .expect(requestTo(callEndpoint))
            .andExpect(method(HttpMethod.POST))
            //Vérification du contenu de l'en-tête de la demande
            .andExpect(content().string(jsonRequestBody))
            .andRespond(withSuccess(jsonResponseBody, MediaType.APPLICATION_JSON_UTF8));

        //Prêt à appeler
        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(){

        //Réponse retournée
        String jsonResponseBody = "";

        //Corps de demande attendu
        String jsonRequestBody = "{\"name\":\"example man\",\"email\":\"[email protected]\",\"gender\":1}";

        //URL à appeler
        String callEndpoint = "https://put-end-point-url";

        //entête
        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))
            //Vérification du contenu de l'en-tête de la demande
            .andExpect(header("Authorization", exampleToken))
            //Vérification du contenu du corps de la demande
            .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);
        }};
        //Si headers ou exampleRequest est retourné à null, il n'est pas appelé correctement, donc java.lang.AssertionError
        restTemplate.exchange(url, HttpMethod.POST, new HttpEntity(exampleRequest, headers), User.class);
    }

Recommended Posts

Différents tests de méthode avec MockRestServiceServer
Différents tests GraphQL
Comment vérifier les nombres entiers avec ruby
Branche conditionnelle avec méthode d'assistance
[ruby] Appel d'une méthode avec un argument
Test unitaire Java avec Mockito
Simuler la méthode simplex avec GUI
Introduction aux algorithmes avec la méthode java-Shakutori
Diverses histoires déroutantes avec Map # computeIfAbsent