Spring 数据 neo4j JUnit4 设置
Spring Data neo4j JUnit4 setup
我承认我在 Java 做事方式上完全是个新手,我完全迷失了尝试进行简单的单元测试 运行。
我正在构建数据访问库并想对其进行单元测试。我正在使用 Spring Data Neo4j 4.0.0.BUILD-SNAPSHOT 因为我需要连接到现实世界中的远程 Neo4j 服务器。
一整天都在与错误作斗争之后,我到了要进行测试的地步class:
@RunWith(SpringJUnit4ClassRunner.class)
@ComponentScan(basePackages = {"org.mystuff.data"})
@ContextConfiguration(classes={Neo4jTestConfiguration.class})
public class PersonRepositoryTest {
@Autowired
PersonRepository personRepository;
protected GraphDatabaseService graphDb;
@Before
public void setUp() throws Exception {
graphDb = new TestGraphDatabaseFactory().newImpermanentDatabase();
}
@After
public void tearDown() {
graphDb.shutdown();
}
@Test
public void testCreatePerson() throws Exception {
assertNotNull(personRepository);
Person p = new Person("Test", "User");
personRepository.save(p);
}
}
Neo4jTestConfiguration.java
@Configuration
@EnableNeo4jRepositories(basePackages = "org.mystuff.data")
@EnableTransactionManagement
public class Neo4jTestConfiguration extends Neo4jConfiguration {
@Bean
public SessionFactory getSessionFactory() {
return new SessionFactory("org.mystuff.data");
}
@Bean
public Neo4jServer neo4jServer() {
// What to return here? I want in-memory database
return null;
}
@Bean
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Session getSession() throws Exception {
return super.getSession();
}
}
当 运行 测试 personRepository.save() 抛出和异常时 'No Scope registered for scope "session"'
我不知道我是否需要配置 class 但没有它我的测试 class 将无法工作,因为 Spring 需要 @ContextConfiguration 并且我想要所有 DI 的好处 Spring提供(除其他外)。
如何让我的测试与 Spring 一起工作?
您可以使用内存数据库 InProcessServer
:
@Bean
public Neo4jServer neo4jServer() {
return new InProcessServer();
}
省略会话范围,因为您的测试不在 Web 容器中 运行。一个例子:https://github.com/neo4j-examples/sdn4-cineasts/blob/4.0-RC1/src/test/java/org/neo4j/cineasts/PersistenceContext.java
这将需要此问题中所述的依赖项:Spring Data Neo4j 4.0.0.M1 Test Configuration
在您的测试 class PersonRepositoryTest
中,您不需要构造数据库实例,您的测试将 运行 与相同的 InProcessServer
相对应。
这是一个示例:https://github.com/neo4j-examples/sdn4-cineasts/blob/4.0-RC1/src/test/java/org/neo4j/cineasts/domain/DomainTest.java
我承认我在 Java 做事方式上完全是个新手,我完全迷失了尝试进行简单的单元测试 运行。
我正在构建数据访问库并想对其进行单元测试。我正在使用 Spring Data Neo4j 4.0.0.BUILD-SNAPSHOT 因为我需要连接到现实世界中的远程 Neo4j 服务器。
一整天都在与错误作斗争之后,我到了要进行测试的地步class:
@RunWith(SpringJUnit4ClassRunner.class)
@ComponentScan(basePackages = {"org.mystuff.data"})
@ContextConfiguration(classes={Neo4jTestConfiguration.class})
public class PersonRepositoryTest {
@Autowired
PersonRepository personRepository;
protected GraphDatabaseService graphDb;
@Before
public void setUp() throws Exception {
graphDb = new TestGraphDatabaseFactory().newImpermanentDatabase();
}
@After
public void tearDown() {
graphDb.shutdown();
}
@Test
public void testCreatePerson() throws Exception {
assertNotNull(personRepository);
Person p = new Person("Test", "User");
personRepository.save(p);
}
}
Neo4jTestConfiguration.java
@Configuration
@EnableNeo4jRepositories(basePackages = "org.mystuff.data")
@EnableTransactionManagement
public class Neo4jTestConfiguration extends Neo4jConfiguration {
@Bean
public SessionFactory getSessionFactory() {
return new SessionFactory("org.mystuff.data");
}
@Bean
public Neo4jServer neo4jServer() {
// What to return here? I want in-memory database
return null;
}
@Bean
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Session getSession() throws Exception {
return super.getSession();
}
}
当 运行 测试 personRepository.save() 抛出和异常时 'No Scope registered for scope "session"' 我不知道我是否需要配置 class 但没有它我的测试 class 将无法工作,因为 Spring 需要 @ContextConfiguration 并且我想要所有 DI 的好处 Spring提供(除其他外)。
如何让我的测试与 Spring 一起工作?
您可以使用内存数据库 InProcessServer
:
@Bean
public Neo4jServer neo4jServer() {
return new InProcessServer();
}
省略会话范围,因为您的测试不在 Web 容器中 运行。一个例子:https://github.com/neo4j-examples/sdn4-cineasts/blob/4.0-RC1/src/test/java/org/neo4j/cineasts/PersistenceContext.java
这将需要此问题中所述的依赖项:Spring Data Neo4j 4.0.0.M1 Test Configuration
在您的测试 class PersonRepositoryTest
中,您不需要构造数据库实例,您的测试将 运行 与相同的 InProcessServer
相对应。
这是一个示例:https://github.com/neo4j-examples/sdn4-cineasts/blob/4.0-RC1/src/test/java/org/neo4j/cineasts/domain/DomainTest.java