У меня есть простой контроллер, фасад, набор сервисов и репозиторий для моей базы данных 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);
}
}
Контроллер, фасад, сервисы не имеют значения.
Можете ли вы сказать мне, что именно я делаю не так?