Spring Boot Test свойства yml не читаются в интеграционных тестах - PullRequest
0 голосов
/ 20 мая 2018

В следующем интеграционном тесте Spring Boot не может найти правильный файл свойств и прочитать его значения:

@RunWith(SpringRunner.class)
@SpringBootTest()
@ActiveProfiles("embedded")
public class ApiApplicationTests {

    @Autowired
    protected Environment env;

    @Test
    public void contextLoads() {
    }

    @Test
    public void verifyProperty() {
        assertEquals("jdbc:h2:mem:testdb",
                env.getProperty("spring.datasource.url"));
    }
}

на основании его выбора файла свойств application-embedded.yml:

spring:
  h2:
    console:
      enabled: true
  liquibase:
    enabled: true
    change-log: classpath:db/changelog/db.changelog-master.xml
    drop-first: true # should be false in prod but good for dev and test!
  datasource:
    url: jdbc:h2:mem:testdb
    username: h2
    password: h2

security:
  oauth2:
    resource:
      filter-order: 3
  signing-key: MaYzkSjmkzPC57L
  security-realm: AvMaint Realm
  jwt:
    client-id: avmaintwebsitejwtclientid
    client-secret: XY7kmzoNzl100
    grant-type: password
    scope-read: read
    scope-write: write
    resource-ids: avmaintwebsitejwtresourceid

Этот тест завершается неудачно с: "java.lang.IllegalStateException: обязательный ключ 'url' не найден".Это приложение выглядит так, будто оно видит профиль:

2018-05-20 10:42:36.810  INFO 66697 --- [    Test worker] au.com.avmaint.api.ApiApplicationTests   : The following profiles are active: embedded

Похоже, что, найдя профиль, он просто идет вперед и все равно читает значения по умолчанию.

кто-нибудь знаетпочему?

Кроме того, я обнаружил, что, добавив аннотацию

@TestPropertySource("/application-embedded.yml")

, я могу заставить его использовать файл, но какой тогда смысл профилей?

1 Ответ

0 голосов
/ 20 мая 2018

Можете ли вы использовать @SpringBootTest (classes = YourMainApplicationClassName.class).Надеюсь, что это поможет загрузить ваш основной класс в качестве точки входа, а также выберет все связанные конфигурации самостоятельно (т.е. загрузит контекст приложения со всеми конфигурациями)

...