如何在Python中进行Neo4j的单元测试?

11

我有一个使用Neo4j数据库编写的Python应用程序。

有人知道最好的方法来对我的应用程序进行单元测试吗?

我已经发现在Java中使用ImpermanentGraphDatabase可以轻松完成此操作。在Python中是否有类似的方法?

非常感谢任何提示。


2
你考虑过在测试中模拟Neo4j吗? - Mikhail Berlinkov
我编写了这个库,用于帮助编写使用Cypher语法查询内存图的测试。希望对一些人有所帮助! - j6m8
2个回答

4
我认为最简单的方法是完全模拟Neo4j。 我喜欢将实体类简化为尽可能少的纯Python功能。 即使您正在使用某些高级ORM访问数据 - 例如在Django中 - 我仍然更喜欢创建一个纯Python类来表示我的模型,并创建一个最小化的dao方法,这将在单元测试期间被模拟。 这样,我就不必在单元测试中接触数据库,我认为这就是单元测试应该表现出的方式。 话虽如此,如果您真的想在测试中拥有neo4j功能,请查看官方neo4j-python-driver软件包的IntegrationTestCase。 它看起来提供了一个基类来继承您的集成测试(因为如果您将DB引入测试中,则本质上是进行集成测试),因为它负责在测试运行之间启动和关闭服务器。

这怎么能算是一个答案呢?嘲笑Neo4j,使用复杂的Cypher语言会花费太多时间,这不像已经有Moto库的Boto3那样。你的方法没有测试数据建模中的错误,也没有检查Cypher语言是否带来了正确的结果。 - ArielB
1
@ArielB 这个答案建议在单元测试中模拟neo4j,这是这个问题的作者正在做的正确方法。同样的答案,在后面的段落中也建议如果作者想要进行集成测试,neo4j驱动程序提供了一个基类,可以用来帮助创建针对真实服务器运行的测试。个人认为这个问题是有效的。 - samu

2

Neo4j社区提供了更多答案:https://community.neo4j.com/t/is-there-a-library-to-unit-test-graphdb-cypher-queries-using-python/8227/5

(简单) 使用libcypher-parser检查您的Cypher语法

您还可以将查询放入.cypher文件中,并使用类似于libcypher-parser(https://github.com/cleishm/libcypher-parser)的语法分析器来检查查询是否有效。

(高级) 启动Docker实例

使用一个简单的Docker容器来启动另一个Neo4j实例,然后您就可以尽情测试...在这里,您可以(在这个沙盒环境中):

  • 仅运行Cypher查询以查看它们是否起作用
  • 填充/种子沙盒Neo4j数据库实例并运行更多实质性的测试

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接