Testcontainers-java: Using DockerComposeContainer in kotlin?

Created on 10 Dec 2018  路  2Comments  路  Source: testcontainers/testcontainers-java

I'm trying to write test in kotlin + junit5 with docker compose

var environment: DockerComposeContainer<*> = DockerComposeContainer(mutableListOf(File("src/test/kotlin/resources/docker-compose.yml")))

Unfortunately I'm getting:

Type inference failed: Not enough information to infer parameter SELF in constructor DockerComposeContainer!> (composeFiles: (Mutable)List!) Please specify it explicitly.

Did anyone got same error?

Most helpful comment

@jeffzoch thanks for guidance. I've created following snippet:

companion object {
    private val instance: KDockerComposeContainer by lazy { defineDockerCompose()}

    class KDockerComposeContainer(file: File) : DockerComposeContainer<KDockerComposeContainer>(file)

    private fun defineDockerCompose() = KDockerComposeContainer(File("src/test/resources/docker-compose.yml"))

    @BeforeAll
    @JvmStatic
    internal fun beforeAll() {
        instance.start()
    }

    @AfterAll
    @JvmStatic
    internal fun afterAll() {
        instance.stop()
    }
}

All 2 comments

Try something like this:

object DockerContainer {
        val instance: KDockerComposeContainer by lazy { startDockerCompose()}
        class KDockerComposeContainer(file: File) : DockerComposeContainer<KDockerComposeContainer>(file)


        private fun startDockerCompose() = KDockerComposeContainer(File("integrationTests/docker-compose.start-archival.yml"))

    }

@jeffzoch thanks for guidance. I've created following snippet:

companion object {
    private val instance: KDockerComposeContainer by lazy { defineDockerCompose()}

    class KDockerComposeContainer(file: File) : DockerComposeContainer<KDockerComposeContainer>(file)

    private fun defineDockerCompose() = KDockerComposeContainer(File("src/test/resources/docker-compose.yml"))

    @BeforeAll
    @JvmStatic
    internal fun beforeAll() {
        instance.start()
    }

    @AfterAll
    @JvmStatic
    internal fun afterAll() {
        instance.stop()
    }
}
Was this page helpful?
0 / 5 - 0 ratings