如何在python中对Neo4j进行单元测试?

时间:2018-03-18 14:14:13

标签: python unit-testing neo4j

我有一个用python编写的Neo4j数据库支持的应用程序。

有谁知道对我的应用程序进行单元测试的最佳方法是什么?

我发现使用ImpermanentGraphDatabase可以在Java中轻松完成。在python中有类似的方法吗?

任何提示都表示赞赏。

3 个答案:

答案 0 :(得分:2)

我要说最简单的方法就是完全嘲笑Neo4j。

我喜欢做的是将实体类简化为尽可能少的纯python功能。

即使您使用一些花哨的ORM来访问您的数据 - 例如在Django中 - 我仍然更喜欢创建一个pure-python类来表示我的模型并创建一个简约的dao方法,该方法将被模拟掉单元测试。这样我就不必在单元测试中触摸数据库了,我认为单元测试的行为应该如何。

话虽如此,如果您真的想在测试中使用neo4j功能,请查看官方neo4j-python-driver软件包的IntegrationTestCase。看起来它提供了一个继承集成测试的基类(因为如果你将数据库拉入测试,你实际上是在进行集成测试),因为它负责启动和关闭服务器之间的服务器。试运行。

答案 1 :(得分:0)

在python中只有3个与python3-neo4j-driver.x86_64 相关的主要玩家。

  

官方Neo4j Python驱动程序

https://github.com/neo4j/neo4j-python-driver/tree/1.6/test

python3-py2neo.noarch
  

提供对Neo4j

的访问的Python库

https://github.com/technige/py2neo/tree/v4/test

python3-neomodel.noarch
  

Neo4j的Python OGM

https://github.com/neo4j-contrib/neomodel/tree/master/test

# s = ...  # your s string

ss = []

split = s.split()

for i, n in enumerate(split):
    try:
        if split[i+1] == '0':
            pass
        elif n != '0':
            ss.append(n)

    except IndexError:
        pass

print ' '.join(ss)

答案 2 :(得分:0)

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

(轻松)使用libcypher-parser

检查您的密码语法

您还可以将查询放入.cypher文件中,并使用诸如libcypher-parser(https://github.com/cleishm/libcypher-parser)之类的linter来检查查询是否有效。

(高级)启动Docker实例

使用一个简单的docker容器启动另一个Neo4j实例,然后您就可以测试自己的内心世界了……在那里(在此沙盒环境中):

  • 只需运行您的密码查询,看看它们是否有效
  • 填充/植入沙盒Neo4j数据库实例并运行更多实质性测试