如何使用JUnit 5(在Kotlin中)设置Spring Data Neo4j集成测试?

问题描述 投票:0回答:2

[Web上大多数用于使用Neo4j进行Spring集成测试的示例仍在JUnit 4上,并使用Neo4jRule。

我们如何为Neo4j + Spring + JUnit 5创建设置?

spring neo4j spring-data-neo4j spring-test junit5
2个回答
0
投票

[自2019年1月起,Neo4jExtension for JUnit 5基本上执行Neo4jExtension对Junit 4的作用。

您这样使用它:

Neo4jRule

如果您只想使用@ExtendWith(org.neo4j.harness.junit.extension.Neo4jExtension.class) class MyTest { ... 线束或Neo4jDatabaseManagementService,这本身就很好用。

但是,在尝试将其与Spring / Spring Data Neo4j一起使用时,我发现该扩展名不能与GraphDatabaseService一起很好地使用。 SpringExtension的钩子似乎发生在SpringExtension的钩子之前。这意味着在初始化Spring上下文时尚未创建任何Neo4jExtension实例,并且您期望Neo4j提供的任何对Neo4j实例的访问尝试都不会被初始化。

我通过创建自己的微型JUnit 5扩展来解决此问题,该扩展利用与Neo4jExtension相同的代码,但在Neo4jExtension执行其操作之前运行,初始化一个静态字段,然后从我的spring配置中对其进行访问。

所以我在测试中有这个静态字段(这里是科特琳):

SpringExtension

并且此扩展是测试中的静态内部类:

companion object {
    private lateinit var neo4j: Neo4j
}

我的班级被这样注释:

class Neo4JSpringExtension(val builder: Neo4jBuilder = Neo4jBuilders.newInProcessBuilder()) : TestInstancePostProcessor {
    override fun postProcessTestInstance(testInstance: Any, extensionContext: ExtensionContext) {
        neo4j = builder.build()
    }
}

然后我在spring配置中使用neo4j静态字段:

@ExtendWith(MovieRepositoryTest.Neo4JSpringExtension::class, SpringExtension::class)
@ContextConfiguration(classes = [MovieRepositoryTest.Config::class])
@EnableTransactionManagement
class MovieRepositoryTest {
    ...

[很有可能使用不同的方法来给这只猫换皮,也许没有创建自定义的JUnit 5扩展,但是在尝试使@Configuration @EnableNeo4jRepositories(basePackageClasses = [MovieRepository::class]) class Config { @Bean fun sessionFactory() = SessionFactory(configuration(), Movie::class.java.getPackage().getName()) @Bean @Throws(Exception::class) fun transactionManager() = Neo4jTransactionManager(sessionFactory()) @Bean fun configuration() = org.neo4j.ogm.config.Configuration.Builder() .uri(neo4j.boltURI().toString()) .build() } 和`SpringExtension一起玩了几个小时之后,这是我发现的解决方法最少的代码。


0
投票

请不要直接使用该扩展名。它主要由核心团队在内部使用。

如果要在嵌入式系统上进行测试,请通过简单的Spring配置使用测试线束。

以下是一些示例:

Neo4jExtension

https://medium.com/neo4j/testing-your-neo4j-based-java-application-34bef487cc3chttps://github.com/michael-simons/neo4j-sdn-ogm-tips/tree/master/examples/using-the-test-harness

https://github.com/michael-simons/neo4j-sdn-ogm-tips/tree/master/examples/using-testcontainers

我会注意上面的^^这个和测试容器将是我们前进的道路。

© www.soinside.com 2019 - 2024. All rights reserved.