带Kotlin单元测试的TestContainers PostgreSQLContainer:“信息不足,无法推断类型变量SELF”

时间:2019-11-23 12:05:25

标签: java spring-boot kotlin testcontainers

我正在尝试使用 TestContainers https://github.com/testcontainers/testcontainers-java)中的PostgreSQLContainer来对我的JPA存储库进行单元测试。

我这样声明我的容器:

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

但是,我在Intellij IDE中遇到了以下错误,

  

没有足够的信息来推断类型变量SELF

当我尝试启动该服务时,完全错误是:

  

错误:(26,43)Kotlin:类型推断失败:信息不足   推断构造函数PostgreSQLContainer中的参数SELF!>(p0:String!)请指定它   明确地。

2 个答案:

答案 0 :(得分:11)

此技巧也有效

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

答案 1 :(得分:1)

TestContainers依赖于泛型类型C<Self extends C<SELF>>的构造,但是 Kotlin 不喜欢这样。 我的解决方法是定义自己的工厂类:

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

我可以这样使用它:

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