TestContainers PostgreSQLContainer с модульным тестом Kotlin: недостаточно информации для вывода переменной типа SELF

Я пытаюсь использовать PostgreSQLContainer из TestContainers (https://github.com/testcontainers/testcontainers-java + https://www.testcontainers.org/) по порядку для модульного тестирования моих репозиториев JPA.

Я объявляю свой контейнер так:

private val postgresqlContainer = PostgreSQLContainer("postgres:12-alpine")

Однако я обнаружил следующую ошибку: из Intellij IDE:

Недостаточно информации для вывода переменной типа SELF

Полная ошибка при попытке запустить службу:

Ошибка: (26, 43) Kotlin: Ошибка вывода типа: недостаточно информации для вывода параметра SELF в конструкторе PostgreSQLContainer ‹SELF: PostgreSQLContainer‹ SELF! ›!› (P0: String!) Укажите это явно.


person veben    schedule 23.11.2019    source источник


Ответы (2)


Этот трюк тоже работает

private val postgresqlContainer = PostgreSQLContainer<Nothing>().apply {
    withDatabaseName("x")
    withUsername("y")
    withPassword("z")
}
person Kimble    schedule 20.02.2020

TestContainers зависит от конструкции универсального типа C<Self extends C<SELF>>, но Kotlin это не нравится. Моим обходным путем было определение моего собственного фабричного класса:

class MyPostgreSQLContainer(imageName: String) : PostgreSQLContainer<MyPostgreSQLContainer>(imageName)

И я могу использовать это так:

private val postgresqlContainer = MyPostgreSQLContainer("postgres:12-alpine")
person veben    schedule 26.11.2019