2017-04-06 13 views
1

私は、私が書いたモジュールをテストするテストクラスと、開発したユーザー定義関数をテストするテストクラスがあります。これらの2つのテストは、テスト目的でNeo4jを別々にインスタンス化します。モジュールのテストはこのようにそれをしない:UDFとカスタムモジュールを同じユニットテストで読み込んで組み込みデータベースをインスタンス化する

class ModuleTest 
{ 
    GraphDatabaseService database; 

    @Before 
    public void setUp() 
    { 
     String confFile = this.getClass().getClassLoader().getResource("neo4j-module.conf").getPath(); 
     database = new TestGraphDatabaseFactory() 
       .newImpermanentDatabaseBuilder() 
       .loadPropertiesFromFile(confFile) 
       .newGraphDatabase(); 
    } 
} 

UDFテストクラスがこのようにその組み込みデータベースをインスタンス化している間:

public class UdfTest 
{ 
    @Rule 
    public Neo4jRule neo4j = new Neo4jRule() 
     .withFunction(Udf.class); 

    @Test 
    public void someTest() throws Throwable 
    { 
     try (Driver driver = GraphDatabase.driver(neo4j.boltURI() , Config.build().withEncryptionLevel(Config.EncryptionLevel.NONE).toConfig())) { 
      Session session = driver.session(); 
      //... 
     } 
    } 
} 

ここでの問題は、最初の形式でのUDFはに登録されていないということですモジュールの2番目。私の質問は、私のモジュールとUDFの両方がロードされているテストで、組み込みNeo4jデータベースを起動するにはどうすればいいですか?

答えて

1

APOCプロシージャがテストクラス内でプロシージャと関数をどのようにロードするかを見てみましょう。彼らは)(セットアップ時にユーティリティメソッドを呼び出します。

public static void registerProcedure(GraphDatabaseService db, Class<?>...procedures) throws KernelException { 
    Procedures proceduresService = ((GraphDatabaseAPI) db).getDependencyResolver().resolveDependency(Procedures.class); 
    for (Class<?> procedure : procedures) { 
     proceduresService.registerProcedure(procedure); 
     proceduresService.registerFunction(procedure); 
    } 
} 

ただ登録するための手続き/関数でGraphDatabaseServiceとクラスを渡すと、これはあなたのテストクラスのためにすべてを設定する必要があります。

関連する問題