Можно ли установить свойства SpringBootTest на лету? - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть приложение SpringBoot, которое я пытаюсь протестировать с помощью Testcontainers . У меня есть что-то вроде:

@SpringBootTest
public class DummyIT {

    @ClassRule
    public static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer();

    static {
        postgreSQLContainer.start();
        String url = postgreSQLContainer.getJdbcUrl(); 
    }
}

К сожалению, Testcontainers используют случайные порты, и если я правильно понял, у нас не должно быть другого пути, что означает, что результат postgreSQLContainer.getJdbcUrl() не является детерминированным c ,

Более того, мое приложение извлекает URL базы данных из его application.properties, и я стремился заменить это значение значением, предоставленным postgreSQLContainer.getJdbcUrl(), до того, как оно будет впервые использовано во время выполнения. Можно ли этого добиться?

Спасибо за помощь.

1 Ответ

0 голосов
/ 08 февраля 2020

Вы можете использовать Testcontainers JDB C Поддержка URL .

Например,

@SpringBootTest(
   properties = {
      "spring.datasource.url=jdbc:tc:postgresql:9.6.8://localhost/your-database",
      "spring.datasource.username=dummy-user",
      "spring.datasource.password=dummy-password",
      "spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect",
      "spring.datasource.driver-class-name=org.testcontainers.jdbc.ContainerDatabaseDriver"
})
public class DummyIT {
}

Драйвер Testcontainers ContainerDatabaseDriver создаст и запустит PostgreSQL сервер 9.6.8 с базой данных с именем your-database.

...