Spring boot test как использовать другое приложение.свойства для интеграционного теста

#java #spring-boot #spring-boot-test

#java #spring-boot #spring-boot-test

Вопрос:

У меня есть интеграционный тест, но проблема в том, что он использует источники данных из основного application.properties, который является базой данных mssql. В своих тестах я хочу использовать базу данных h2, для этого я создал application-test.poperties в src / test / resources . В моем тестовом классе я определил @TestPropertySource, который ссылается на этот файл свойств. Но в выходных данных журнала я вижу, что тестовый класс все еще использует подключение к базе данных mssql.

Вот мой тестовый класс

     @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    @Transactional
    @TestPropertySource(locations="classpath:application-test.properties")
    public class UserControllerTest {

        @LocalServerPort
        private int port;
        TestRestTemplate restTemplate = new TestRestTemplate();
        HttpHeaders headers = new HttpHeaders();
 ...
  

Вот мой файл src / test / resources / application-test.properties

     spring.datasource.datasource.url=jdbc:h2:mem:scserver
    spring.datasource.username=sa
    spring.datasource.password=
    spring.datasource.driverClassName=org.h2.Driver
    spring.datasource.jpa.database-platform=org.hibernate.dialect.H2Dialect
   spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServerDialect

    # Hibernate ddl auto (create, create-drop, validate, update)
    spring.jpa.hibernate.ddl-auto=create-drop


    #logging
    logging.level.root=info
    logging.file=foo-spring-rest.log

    #required for SpringBootTest does not know why
    spring.main.allow-bean-definition-overriding=true
    spring.h2.console.enabled=true
    spring.h2.console.path=/h2-console
  

Комментарии:

1. Попробуйте назвать его application.properties вместо application-test.properties. Если он находится в src / test / resources, он должен автоматически переопределять тот, что находится в src / main / resources

Ответ №1:

попробуйте использовать вместо

 @TestPropertySource(locations="classpath:application-test.properties")
  

это

 @TestPropertySource(locations = {"classpath:application-test.properties"})
// dont forget the curvy brackets, because location'S' 
  

или аннотацию профиля

 @ActiveProfiles("test")