Как правильно настроить тест полной интеграции Spring Boot 2.2 REST с JUnit5 - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть простой контроллер, фасад, набор сервисов и репозиторий для моей базы данных H2 для клиента. Он работает нормально, но мне нужен тест интеграции E2E со всем контекстом приложения. А с JUnit5.

Я перепробовал множество настроек, много раз получал ошибки типа found multiple declarations of @BootstrapWith for test. В конце концов я заставил это работать, но есть проблема с Spring JPA CustomerRepository, который является интерфейсом. Я никогда не пытался использовать его таким образом, поэтому у меня нет опыта с ним. Проще говоря, он не создаст никакого компонента такого типа, поскольку это просто интерфейс. Как весеннее загрузочное приложение, оно работает таким образом, но в интеграционном тесте это не так.

Ошибка все та же: Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [xxx.CustomerRepository].

Это моя тестовая установка:

@ExtendWith(SpringExtension.class)
@AutoConfigureMockMvc
@ContextConfiguration(classes = {
    CustomerController.class,
    CustomerFacade.class,
    CustomerTerminationService.class,
    CustomerRepository.class
})
@WebMvcTest(CustomerController.class)
@Import(CustomerRepository.class)
class CustomerFullIntegrationTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    void getCustomer() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders
            .get("/customer/1")
            .accept(MediaType.APPLICATION_JSON))
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.lastName").exists())
            .andExpect(jsonPath("$.products").isNotEmpty());
    }
}

Это мой репозиторий:

public interface CustomerRepository extends JpaRepository<Customer, Long> {}

Это мое приложение:

@SpringBootApplication
public class Application {

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

Контроллер, фасад, сервисы не имеют значения.

Можете ли вы сказать мне, что именно я делаю не так?

...