Как проверить автоматически созданные конечные точки @RepositoryRestResource в spring-boot-starter-data-rest? - PullRequest
0 голосов
/ 16 апреля 2019

Включая spring-boot-starter-data-rest и другой репозиторий постоянства (в моем случае spring-boot-starter-data-mongodb), у вас есть конечные точки для CRUD в REST автоматически (при условии, что у вас есть основной класс, содержащий аннотированный метод main).с @SpringBootApplication на правильном уровне) создан для вас.Например, вы получаете конечную точку с GET, PUT, POST, DELETE и т. Д. Под вашим basePath при посещении http://locahost:8080/api/sampleEntities, поскольку у меня есть SampleRepository для управления экземплярами SampleEntity.

Как я могу проверить эти конечные точки в JUnit5 + Mockito + Spring Boot?

Это мой текущий контрольный пример, но единственной конечной точкой, которую я вижу, является конечная точка профиля.

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.context.ApplicationContext;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.hateoas.Resources;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;

import java.util.Collections;
import java.util.List;

import static java.util.Arrays.asList;
import static org.mockito.Mockito.doReturn;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SampleEntityRestTest {

    @LocalServerPort private int port;
    @MockBean private SampleRepository sampleRepository;

    @Autowired private ApplicationContext applicationContext;
    @Autowired private TestRestTemplate testRestTemplate;

    @DisplayName("Mocking sample repository works.")
    @Test
    public void checkMockingWorks() {
        List<SampleEntity> sampleEntityList = asList(SampleEntity.builder().firstName("firstname").lastName("lastname").email("some@some.com").build());
        Page<SampleEntity> page = new PageImpl<>(sampleEntityList);
        doReturn(page).when(sampleRepository).findAll(Pageable.unpaged());

        SampleRepository sampleRepositoryFromContext = applicationContext.getBean("sampleRepository", SampleRepository.class);
        List<SampleEntity> sampleEntityListFromContext = sampleRepositoryFromContext.findAll(Pageable.unpaged()).getContent();
        Assertions.assertFalse(sampleEntityListFromContext.isEmpty());
        Assertions.assertEquals("firstname", sampleEntityListFromContext.get(0).getFirstName());
        Assertions.assertEquals("lastname", sampleEntityListFromContext.get(0).getLastName());
        Assertions.assertEquals("some@some.com", sampleEntityListFromContext.get(0).getEmail());
    }

    @Test
    public void testCrudOfSampleEntity() {
        List<SampleEntity> sampleEntityList = asList(SampleEntity.builder().firstName("firstname").lastName("lastname").email("some@some.com").build());
        Page<SampleEntity> page = new PageImpl<>(sampleEntityList);
        doReturn(page).when(sampleRepository).findAll(Pageable.unpaged());

        ResponseEntity<Resources<SampleEntity>> resourcesResponseEntity = testRestTemplate.exchange(
                Constants.ENDPOINT + ":" + port + "/api/" + Constants.SAMPLE_ENTITY,
                HttpMethod.GET,
                null,
                new ParameterizedTypeReference<Resources<SampleEntity>>() {},
                Collections.emptyList());
        Assertions.assertEquals(200, resourcesResponseEntity.getStatusCode());
    }
}

Запуск реального приложения и указание наhttp://localhost:8080/api/sampleEntities отлично работает.

Фактический класс приложения выглядит следующим образом:

package com.somepackage;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SomeRestApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(SomeRestApiApplication.class, args);
    }

}

Может кто-нибудь дать мне пример кода о том, как построить мои тестовые классы и методы по порядкупроверить конечные точки отдыха, автоматически сгенерированные spring-boot-starter-data-rest?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...