2016-09-27 8 views
0

私はSpring(Neo4j側)にはかなり新しく、@AutoWire - リポジトリに問題があります。 これが私のレポです:Spring Neo4j - autowireリポジトリがnullを返します

package org.jarivm.relationGraph.objects.repositories; 
public interface EmployeeRepository extends GraphRepository<Employee> { 
    @Query("MATCH a=(:Employee)-[:WORKED_ON]->(p:Project) WHERE id(p)={0} RETURN a") 
    Iterable<Employee> getTeamMates(Project client); 
} 

私のテストクラス:

package org.jarivm.relationGraph; 

import org.apache.commons.collections4.set.ListOrderedSet; 
import org.jarivm.relationGraph.objects.domains.Employee; 
import org.jarivm.relationGraph.objects.domains.Project; 
import org.jarivm.relationGraph.objects.repositories.EmployeeRepository; 
import org.jarivm.relationGraph.utilities.NodeProperties; 
import org.junit.After; 
import org.junit.Before; 
import org.junit.FixMethodOrder; 
import org.junit.Test; 
import org.junit.runners.MethodSorters; 
import org.springframework.beans.factory.annotation.Autowired; 

import java.util.Iterator; 


/** 
* @author Jari Van Melckebeke 
* @since 02.09.16 
*/ 
@FixMethodOrder(MethodSorters.JVM) 
public class Tests extends Application { 
    @Autowired 
    private Facade facade; 
    @Autowired 
    private EmployeeRepository employeeRepository; 

    @Before 
    public void setUp() throws Exception { 
     facade = new Facade(); 
    } 

    @After 
    public void tearDown() throws Exception { 
     facade.tearDown(); 
    } 

/* 
    @Test 
    public void persistedEmployeeShouldBeRetrievableFromGraphDB() { 
     Employee employee = new Employee("john", "adams"); 
     //System.out.println(session.getTransaction().status()); 
     if (!facade.findEmployeeByProperty("name", employee.getName()).iterator().hasNext()) { 
      facade.commit(employee); 

      Employee foundHim = facade.findEmployeeByProperty("name", employee.getName()).iterator().next(); 
      assert foundHim.getId().equals(employee.getId()); 
      assert foundHim.getName().equals(employee.getName()); 
     } 
    } 

    @Test 
    public void persistedChainShouldBeRetrievableFromGraphDB() { 
     Employee employee = new Employee("john", "myles"); 
     Client client = new Client(); 
     Sector sector = new Sector(); 
     Project project = new Project(); 
     client.setName("Real Dolmen"); 
     project.setClient(client); 
     project.setCost(100.0); 
     project.setName("project highrise"); 
     Set<Employee> set = new ListOrderedSet<Employee>(); 
     set.add(employee); 
     project.setTeam(set); 
     sector.setName("game"); 
     client.setSector(sector); 
     facade.commit(sector); 
     facade.commit(employee); 
     facade.commit(client); 
     facade.commit(project); 

     Client foundHim = facade.findClientByProperty("name", client.getName()).iterator().next(); 
     assert foundHim.getId().equals(client.getId()); 
     assert foundHim.getName().equals(client.getName()); 
    } 


    @Test 
    public void projectShouldBeInsertableAlone() { 
     Project project = new Project(); 
     project.setName("random"); 
     project.setLanguage("Java"); 
     facade.commit(project); 

     Project foundHim = facade.findProjectByProperty("name", project.getName()).iterator().next(); 
     assert foundHim.getId().equals(project.getId()); 
    } 

    @Test 
    public void clientShouldBeInsertableAlone() { 
     Client client = new Client(); 
     client.setName("Colruyt"); 

     facade.commit(client); 

     Client foundHim = facade.findClientByProperty("name", client.getName()).iterator().next(); 
     assert foundHim.getId().equals(client.getId()); 
    }*/ 

    @Test 
    public void createdNodesShoudBeEditable() { 
     Iterator<Employee> employees = facade.findEmployeeByProperty("name", "john").iterator(); 
     Project project = facade.findProjectByProperty("name", "random").iterator().next(); 
     while (employees.hasNext()) { 
      Employee e = employees.next(); 
      if (project.getTeam() == null) 
       project.setTeam(new ListOrderedSet<Employee>()); 
      project.getTeam().add(e); 
     } 
     facade.commit(project); 
    } 


    package org.jarivm.relationGraph; 

    @Autowired 
    private EmployeeRepository employeeRepository; 

    @Test 
    public void teamMatesShouldBeViewable() { 
     Project p = facade.findProjectByProperty("name", "Matsoft").iterator().next(); 
     System.out.println(p); 
     System.out.println(employeeRepository); 
     Iterable<Employee> e = employeeRepository.getTeamMates(p); 
     System.out.println(e.iterator()); 
    } 
} 

と私のApplication.javaクラス:

package org.jarivm.relationGraph; 

import org.neo4j.ogm.session.SessionFactory; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.data.neo4j.config.Neo4jConfiguration; 
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 

/** 
* @author Jari Van Melckebeke 
* @since 23.09.16 
*/ 
@EnableTransactionManagement 
@ComponentScan(basePackages = {"org.jarivm.relationGraph"}) 
@Configuration 
@EnableNeo4jRepositories(basePackages = "org.jarivm.relationGraph.objects.repositories.EmployeeRepository") 
public class Application extends Neo4jConfiguration { 

public static final String URL = System.getenv("NEO4J_URL") != null ? System.getenv("NEO4J_URL") : "http://localhost:7474"; 

@Bean 
public org.neo4j.ogm.config.Configuration getConfiguration() { 
    org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration(); 
    config 
      .driverConfiguration() 
      .setDriverClassName("org.neo4j.ogm.drivers.http.driver.HttpDriver") 
      .setURI(URL) 
    .setCredentials("neo4j", "mypassword"); 
    return config; 
} 

@Override 
public SessionFactory getSessionFactory() { 
    return new SessionFactory(getConfiguration(), "org.jarivm.relationGraph.objects.domains"); 
} 
} 

私がやるよう@autowireは、このプログラムでは動作しませんでした問題が何であるかわからない... ありがとうございました Jari Van Melckebeke

+0

あなたのレポのパッケージ名を追加することはできますか? –

+0

あなたは完全なテストクラスの署名を投稿できますか?通常、テストクラス自体にアノテーションが必要ですか?単体テストの依存性注入を有効にするためにSpringベースのテキストクラスから拡張しますか? –

+0

または何か他のものを掲示しなければならないのですか?私のプロジェクトはgithub(https://github.com/N00bface/Real-Dolmen-Stage-Opdrachten/tree/master/src/main/java/org/jarivm/relationGraph)にあります。 –

答えて

0

私はあなたのテストは、クラスは、アプリケーションを拡張するべきではありませんが、代わりにRunsWithで注釈を付けることだと思う - (未テスト)のようなもの:詳細については、

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes=org.jarivm.relationGraph.Application.class, loader=AnnotationConfigContextLoader.class 
public class Tests { 

、@Configurationクラスで統合テストというセクションを参照してください。

関連する問題