0

我有一系列单元测试需要清除 neo4j 数据库。如果我单独运行它们,所有测试都会通过,但是当我全部运行它们时,有些测试会失败,说找不到特定节点:

org.neo4j.graphdb.NotFoundException: Node[6] not found.
at org.neo4j.kernel.impl.core.NodeManager.getNodeForProxy(NodeManager.java:505)
at org.neo4j.kernel.impl.core.NodeProxy.hasProperty(NodeProxy.java:151)
at org.springframework.data.neo4j.fieldaccess.PropertyFieldAccessorFactory$PropertyFieldAccessor.doGetValue(PropertyFieldAccessorFactory.java:85)
at org.springframework.data.neo4j.fieldaccess.ConvertingNodePropertyFieldAccessorFactory$ConvertingNodePropertyFieldAccessor.doGetValue(ConvertingNodePropertyFieldAccessorFactory.java:89)
at org.springframework.data.neo4j.fieldaccess.PropertyFieldAccessorFactory$PropertyFieldAccessor.getValue(PropertyFieldAccessorFactory.java:80)
at org.springframework.data.neo4j.fieldaccess.DefaultEntityState.getValue(DefaultEntityState.java:97)
at org.springframework.data.neo4j.fieldaccess.DetachedEntityState.getValue(DetachedEntityState.java:100)
at org.springframework.data.neo4j.fieldaccess.DetachedEntityState.getValue(DetachedEntityState.java:105)

我已经尝试过了,但它没有解决我的问题:Neo4jDatabaseCleaner

值得注意的是,有问题的测试是与属性相关的测试。

我还能尝试什么?

4

4 回答 4

4

使用Neo4j 内核自带的 ImpermanentGraphDatabase 怎么样

构建/销毁图表而不用担心清理等。

于 2012-08-20T18:29:52.763 回答
3

我们解决这个问题的方法是拥有一个所有单元测试类都扩展的上下文感知抽象类。此方法包含一个 before 方法,用于清除所有已定义图形存储库中的所有数据。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/applicationContext.xml", "/applicationContext-test.xml" })
public abstract class AbstractTestBase {

    @Autowired
    private ApplicationContext ctx;

    @Before
    public void clearAllGraphRepositories() {
        Map<String, GraphRepository> graphRepositories = ctx.getBeansOfType(GraphRepository.class);
        for (GraphRepository graphRepository : graphRepositories.values()) {
            graphRepository.deleteAll();
        }
    }

}

这显然可以很容易地修改为只清除特定的存储库,但我会把它留给你...... :-)

于 2012-09-21T14:09:36.803 回答
1

一种简单的方法是运行测试事务并在每次测试后回滚?

于 2012-08-18T20:52:28.873 回答
0

我正在使用本教程设置测试环境: http ://blog.everymansoftware.com/2011/11/development-setup-for-neo4j-and-php.html

关键是neo4j的一个插件,叫做test-delete-db-extension-1.8.jar

或者,在 gremlin 中,您可以调用命令 g.clear(); (似乎与插件的功能相同)。

于 2012-08-20T13:30:52.147 回答