Как создать базовый тестовый класс TestContainers в Котлине с помощью JUnit 5 - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь использовать Neo4j TestContainers с Kotlin, Spring Data Neo4j, Spring Boot и JUnit 5. У меня много тестов, которые требуют использования контейнера тестов. В идеале я хотел бы избежать копирования определения и конфигурации контейнера в каждом тестовом классе.

В настоящее время у меня есть что-то вроде:

@Testcontainers
@DataNeo4jTest
@Import(Neo4jConfiguration::class, Neo4jTestConfiguration::class)
class ContainerTest(@Autowired private val repository: XYZRepository) {

    companion object {
        const val IMAGE_NAME = "neo4j"
        const val TAG_NAME = "3.5.5"

        @Container
        @JvmStatic
        val databaseServer: KtNeo4jContainer = KtNeo4jContainer("$IMAGE_NAME:$TAG_NAME")
                .withoutAuthentication()
    }

    @TestConfiguration
    internal class Config {
        @Bean
        fun configuration(): Configuration = Configuration.Builder()
                .uri(databaseServer.getBoltUrl())
                .build()
    }

    @Test
    @DisplayName("Create xyz")
    fun testCreateXYZ() {
        // ...
    }

}

class KtNeo4jContainer(val imageName: String) : Neo4jContainer<KtNeo4jContainer>(imageName)

Как извлечь определение сервера баз данных и конфигурацию @TestConfiguration? Я пробовал разные способы создания базового класса и его расширения с помощью ContainerTest, но он не работает. Насколько я понимаю, статические атрибуты не наследуются в Котлине.

...