【问题标题】:How to do integration test in spring data neo4j (SDN4)如何在 spring data neo4j (SDN4) 中进行集成测试
【发布时间】:2015-04-16 07:58:11
【问题描述】:

我想在一个项目中编写集成测试,该项目在 Spring Boot 应用程序的上下文中使用 Spring Data Neo4J 版本 4 (SDN4)。

有人知道怎么做吗?

【问题讨论】:

    标签: neo4j spring-boot spring-data-neo4j


    【解决方案1】:

    SDN4 的 Cineasts 示例应用程序在此处进行了测试:https://github.com/neo4j-examples/sdn4-cineasts/tree/master/src/test/java/org/neo4j/cineasts

    希望对您有所帮助。

    【讨论】:

    • 是的,我尝试按照 sdn-cineasts 的方式重写我的测试。但它只适用于简单的情况。例如我有 init (spring) beans 来检查数据库中的“预填充”(例如,当不是创建一个等时,管理员用户是否可用),并且这个函数不适用于从 WrappingServerIntegrationTest 扩展测试类的方法,因为我有当这个函数没有“连接”到数据库。正在运行。
    • 我不清楚你在问什么——你的意思是你想要一个 GraphDatabaseService 的句柄吗?如果是这样,您可以使用 getDatabase()
    • 我无法初始化数据。出于这个原因,我有一个实现 CommandLineRunner 并填充数据库的 spring bean(例如,当不存在但使用 spring 数据存储库时使用默认管理员用户)。但是这个功能。制造巨大的麻烦。例如。当我将应用程序作为“普通”网络应用程序运行时,neo4j 会话是用“@Scope(value = “session”,proxyMode = ScopedProxyMode.TARGET_CLASS)”定义的。所以会话不可用。我收到“范围'会话'对于当前线程不活动”的错误。在集成测试中,我通过执行 func 解决了问题。在@Before 方法中...
    【解决方案2】:

    您的集成测试可以使用诸如 Spring 的 MockMvc 之类的模拟框架来避免启动 Web 容器的需要。如果您根本不希望它们在 Web 上下文中运行,您可以使用不指定会话范围 bean 的不同配置文件进行测试。

    SDN 4 代码库中的集成测试采用这两种方法。

    https://github.com/spring-projects/spring-data-neo4j/tree/4.0/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration

    【讨论】:

    • 问题不在于集成测试,而在于在“网络”会话的上下文中使用 neo4j 会话(在“正常”网络服务器模式下)。在这种情况下,会话不可用于批处理任务或启动任务(对吗?)。定义没有spring范围“会话”的neo4j会话就可以了????
    • 我还没有尝试过,但是如果您需要此功能,您应该能够创建多个 Neo4jSession bean 实例。为 Web 应用程序保留通常的会话范围 bean,并为您的启动任务创建一个附加的应用程序范围的 Neo4jSession bean。显然 bean 名称必须不同,但是您可以在 CommandLineRunner 中注入应用程序范围的实例。 (我假设您依赖 Spring Boot 的行为来为您调用 CommandLineRunner bean)。请记住,两个 Neo4jSession bean 将无法共享映射上下文。
    • 另一种方法是放弃 CommandLineRunner 的想法,而是创建一个实现 BeanPostProcessor 的 bean。在postProcessAfterInitialization方法中,等待Spring实例化Neo4jSession bean,然后在bean中直接调用你的启动代码。
    • 我也试过 BeanPostProcessor。但是这种方法和 CommandLineRunner 有同样的问题。并且使用另一个会话 bean 也不是一个好主意,因为您无法使用 spring 数据存储库的东西......(我无法想象如何解释 spring 数据存储库的东西要使用哪个会话)
    猜你喜欢
    • 2021-04-15
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2018-11-19
    相关资源
    最近更新 更多