Тестовые примеры CrudRepository без вставки данных в БД - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть один класс репозитория, который реализует CrudRepository.Затем в сервисном классе я подключил эту автомастерскую.Затем в классе контроллера я автоматически подключил этот сервис.

Я хочу написать контрольные примеры класса контроллера.Я использую приведенную ниже конфигурацию.

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
    public class XYZControllerTest {

        MockMvc mockMvc;

        @Mock
        private XYZController xyzController;

        @Autowired
        private TestRestTemplate template;

        @Autowired
        XYZRepository xyzRepository;

        @Before
        public void setup() throws Exception {
            mockMvc = MockMvcBuilders.standaloneSetup(xyzController).build();
        }

        @Test
        public void testPanelShouldBeRegistered() throws Exception {
            HttpEntity<Object> xyz = getHttpEntity("{\"name\": \"test 1\", \"email\": \"test10000000000001@gmail.com\","
                    + " \"registrationNumber\": \"41DCT\",\"registrationDate\":\"2018-08-08T12:12:12\" }");
            ResponseEntity<XYZ> response = template.postForEntity("/api/xyz", xyz, XYZ.class);

    }
}

Моя проблема в том, что когда я запускаю тестовый пример, данные собираются для вставки в БД, которая используется для приложения.Могу ли я проверить это, не вставляя данные в БД.

1 Ответ

0 голосов
/ 13 декабря 2018

Концептуально, когда мы тестируем сервисы, мы вместо макета внедряем репозитории.

Вам необходимо смоделировать ваш репозиторий и настроить поведение для возврата данных.

Пример:

@MockBean
XYZRepository xyzRepository;

@Test
public void test() {

    // other mocks
    //
    when(xyzRepository.findAll()).thenReturn(Arrays.asList(new XYZ()));

    // service calls
    // assertions
}
...