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

3

The way we solve this is by having a context aware abstract class that all unit test classes extend. This method contains a before method that clears our all the data in all defined graph repositories.

@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();
        }
    }

}

This can obviously easily be modified to only clear specific repositories, but I'll leave that to you... :-)

于 2012-09-21T14:09:36.803 に答える
1

これを行う簡単な方法の 1 つは、テストをトランザクショナルに実行し、各テストの後にロールバックすることですか?

于 2012-08-18T20:52:28.873 に答える
0

このチュートリアルを使用してテスト環境をセットアップしています: http://blog.everymansoftware.com/2011/11/development-setup-for-neo4j-and-php.html

重要なポイントは、test-delete-db-extension-1.8.jarという neo4j 用のプラグインです。

または、gremlin では、コマンド g.clear(); を呼び出すことができます。(プラグインと同じ機能のようです)。

于 2012-08-20T13:30:52.147 に答える