我有一系列单元测试,我需要清除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
值得注意的是,有问题的测试是与属性有关的测试。
我还能尝试什么?
答案 0 :(得分:4)
使用Neo4j内核附带的ImpermanentGraphDatabase怎么样?
构建/销毁图表而不必担心清理等。
答案 1 :(得分: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();
}
}
}
这显然很容易被修改为只清除特定的存储库,但我会把它留给你...... :-)
答案 2 :(得分:1)
执行此操作的一种简单方法是在每次测试后运行测试trantransactional并回滚?
答案 3 :(得分: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(); (似乎与插件的功能相同)。