Hi all, I'm trying to use Kotest + TestContainers ...
# kotest
j
Hi all, I'm trying to use Kotest + TestContainers (neo4J database) and I cannot make it work. The error is:
Not enough information to infer type variable T
Copy code
io.kotest.extensions.testcontainers.TestContainerExtension public constructor TestContainerExtension<T : GenericContainer<out T>>(
    container: GenericContainer<out T>,
    lifecycleMode: LifecycleMode
)
Adding the test code in the thread 👇 Thanks for any help!!
Code in the test.
Copy code
import io.kotest.core.extensions.install
import io.kotest.core.spec.style.FunSpec
import io.kotest.extensions.testcontainers.TestContainerExtension
import io.kotest.matchers.shouldBe
import org.junit.jupiter.api.Test
import org.springframework.boot.test.autoconfigure.data.neo4j.DataNeo4jTest
import org.testcontainers.containers.Neo4jContainer
import org.testcontainers.utility.DockerImageName

@DataNeo4jTest
class ExampleGraphRepositoryTest : FunSpec({

    // Example outside Kotest
    val neo4jContainer: Neo4jContainer<*> = Neo4jContainer<Nothing>("neo4j:4.4.5").apply {
        withAdminPassword("secret")
    }

    //Following Kotest extension example
    val container = install(TestContainerExtension(Neo4jContainer(DockerImageName.parse("neo4j:4.4.5")))) {
        withAdminPassword("secret")
    }

    @Test
    fun `is the container running`() {
        container.start()
        container.isRunning() shouldBe true
    }
})
s
What line has the error
j
The error is instantiating the container (see attached pic from IDE error message)
Copy code
val container = install(TestContainerExtension(Neo4jContainer(DockerImageName.parse("neo4j:4.4.5")))) {
        withAdminPassword("secret")
    }
The stack trace is running the test:
Copy code
Caused by: java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	at kotlin.reflect.jvm.internal.calls.CallerImpl$Constructor.call(CallerImpl.kt:41)
	at kotlin.reflect.jvm.internal.KCallableImpl.call(KCallableImpl.kt:108)
	at io.kotest.engine.spec.InstantiateSpecKt.javaReflectNewInstance(instantiateSpec.kt:51)
	... 105 more
Caused by: java.lang.IllegalStateException: Could not find a valid Docker environment. Please see logs and check configuration
	at org.testcontainers.dockerclient.DockerClientProviderStrategy.lambda$getFirstValidStrategy$4(DockerClientProviderStrategy.java:157)
	at java.base/java.util.Optional.orElseThrow(Optional.java:403)
	at org.testcontainers.dockerclient.DockerClientProviderStrategy.getFirstValidStrategy(DockerClientProviderStrategy.java:149)
	at org.testcontainers.DockerClientFactory.getOrInitializeStrategy(DockerClientFactory.java:147)
	at org.testcontainers.DockerClientFactory.client(DockerClientFactory.java:188)
	at org.testcontainers.DockerClientFactory$1.getDockerClient(DockerClientFactory.java:102)
	at com.github.dockerjava.api.DockerClientDelegate.authConfig(DockerClientDelegate.java:108)
	at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:325)
	at io.kotest.extensions.testcontainers.TestContainerExtension.mount(TestContainerExtension.kt:33)
	at io.kotest.extensions.testcontainers.TestContainerExtension.mount(TestContainerExtension.kt:17)
	at io.kotest.core.extensions.MountableExtensionKt.install(MountableExtension.kt:36)
	at dev.salsa.core.profile.adapter.outbound.worker.WorkerGraphRepositoryTest$1.invoke(WorkerGraphRepositoryTest.kt:21)
	at dev.salsa.core.profile.adapter.outbound.worker.WorkerGraphRepositoryTest$1.invoke(WorkerGraphRepositoryTest.kt:13)
	at io.kotest.core.spec.style.FunSpec.<init>(funSpec.kt:25)
	at dev.salsa.core.profile.adapter.outbound.worker.WorkerGraphRepositoryTest.<init>(WorkerGraphRepositoryTest.kt:13)
	... 113 more
Thanks for any help @sam!
Hi @sam, wondering if you have any clue or recommendation. Thank you 🙏🏻
s
Caused by: java.lang.IllegalStateException: Could not find a valid Docker environment
sounds like docker engine isn't installed on the machine you're running this on
153 Views