У меня есть единичный тест, который включает в себя несколько простых операций с базой данных. Взаимодействие с базой данных осуществляется с помощью Spring Data и JPA. Моя среда - Spring Boot 1.4
.Загрузка только Spring Boot Data/JPA-уровня в тесте Unit/Integration с базой данных
Мой тест выглядит следующим образом:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)
@SpringBootTest(classes = {Application.class})
@Transactional
public class OrderRepositoryTest {
@Autowired
private OrderRepository orderRepository;
@Autowired
EntityManager entityManager;
@Test
public void can_create_and_find_one_order() {
String orderId = "XX_YY";
Order order1 = createAnOrder();
orderRepository.save(order1);
entityManager.flush();
entityManager.clear();
Order order2 = orderRepository.findOne(orderId);
Assertions.assertThat(order2).isEqualTo(order1);
}
}
Где Применение является точкой входа Spring загрузки, и содержит EnableAutoConfiguration аннотацию:
@EnableAutoConfiguration
@EnableConfigurationProperties
@ComponentScan(basePackageClasses = {
WebMvcConfig.class,
ServicesConfiguration.class,
WebSecurityConfiguration.class
})
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder applicationBuilder) {
return applicationBuilder.sources(Application .class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Теста ли загрузить слой JPA, и выполняет операцию. Но он также загружает конфигурацию MVC, конфигурацию безопасности и множество других слоев, которые я не тестирую.
Вопрос: Как я могу заменить EnableAutoConfiguration
и загрузить только тот слой JPA, который мне нужен?
В идеале было бы класс конфигурации похож на расширение'WebMvcConfigurerAdapter' таким образом, что я могу использовать его из модульного тестирования и точки входа в приложение, так что мой блок тест также проверяет конфигурацию:
@Configuration
@EnableJpaRepositories(basePackages = "class.path.to.my.repositories")
public class PersistenceConfiguration {
// Whatever needs to be here
// ...
}
Поскольку исходный плакат, по-видимому, хочет провести транзакционные тесты, вы должны удалить '(распространение = распространение_NOT_SUPPORTED)' (и переименовать тестовый класс). В противном случае ваш ответ выглядит хорошо. –
@SamBrannen да, спасибо за напоминание. –
Если я просто использую этот код без каких-либо изменений, я получаю ошибку 'Невозможно найти @SpringBootConfiguration, вам нужно использовать @ContextConfiguration или @SpringBootTest (classes = ...) с вашим тестом' – jmgonet