Я пытаюсь использовать 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, но он не работает. Насколько я понимаю, статические атрибуты не наследуются в Котлине.