Как уже упоминался Мартен, @IntegrationTest
следует использовать только тогда, когда вам необходимо проверить против развернутого приложения Spring загрузки (например, развернутый во встроенном сервере Tomcat , Jetty или Undertow). Поэтому, если ваша цель - изолировать ваш слой репозитория, вы не должны использовать @IntegrationTest
.
С другой стороны, если ваши тесты требуют определенной функциональности Spring Boot (в отличие от стандартных функциональных возможностей Spring Framework, семантики и значений по умолчанию), вы фактически хотите аннотировать свой тестовый класс с помощью @SpringApplicationConfiguration
вместо @ContextConfiguration
. Причина в том, что @SpringApplicationConfiguration
предварительно сконфигурирует SpringApplicationContextLoader
, который относится к Spring Boot.
Кроме того, если вы хотите, чтобы ваши хранилища интеграционные тесты уровня, чтобы работать быстрее (т.е. без полного погона Spring ботинке), вы можете выбрать, чтобы исключить классы конфигурации аннотированные с @EnableAutoConfiguration
так, что будет автоматически конфигурируемый каждый кандидата для автоматическая конфигурация, найденная в пути к классам. Например, если вы просто хотите, чтобы Spring Boot автоматически настраивал встроенную базу данных и Spring Data JPA (с Hibernate в качестве поставщика JPA), наряду с проверкой сущности, вы могли бы составить свою тестовую конфигурацию примерно так:
@Configuration
@EnableJpaRepositories(basePackageClasses = UserRepository.class)
@EntityScan(basePackageClasses = User.class)
@Import({ DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
public class TestRepositoryConfig {}
И затем использовать эту конфигурацию в тестовом классе, как это:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestRepositoryConfig.class)
@Transactional
public class UserRepositoryTests { /* ... */ }
с уважением,
Сэм
п.с. Вы также можете найти мой ответ на следующий, связанный с этим вопрос: Disable security for unit tests with spring boot
Вы должны использовать свой класс приложения в аннотации 'SpringApplicationConfiguration', а не какую-либо произвольную конфигурацию, которую вы создали. Также вам действительно нужен '@ Integrationtest'? Поскольку это запустит ваше приложение, чтобы вы могли использовать «RestTemplate» или что-то еще, чтобы протестировать ваше приложение. Это не то, что вы, кажется, делаете или нуждаетесь. –
1) Я не могу использовать класс приложения, поскольку этот модуль зависит от веб-модуля (веб-модуль содержит класс приложения). 2) Зачем мне нужен RestTemplate для тестирования репозиториев? Это не тест интеграции сети или веб-сервиса. – led
Вы действительно понимаете, что делает '@ IntegrationTest'? Судя по тому, что вы пытаетесь сделать, это не имеет никакого отношения к тесту интеграции в смысле Spring Boot. Вы просто пишете единичный тест для репозитория, а не интеграционный тест. –