我正在使用 com.sun.jersey.test.framework.JerseyTest 为我的Jersey应用程序创建JUnit测试。该应用程序使用neo4j和Spring Data来加载数据并通过REST API返回它。
测试用我的球衣neo4j spring数据webapp启动嵌入式灰熊服务器。之后我能够在neo4j数据库中调用休息请求并创建节点。 不幸的是,我的测试目前已修复到单个neo4j数据库位置,因为这是在我的 applicationContext.xml 中配置的,如下所示:
<neo4j:config storeDirectory="/tmp/myapp/neo4jdb" />
如果我同时执行类似的测试,我的测试将失败,因为将使用相同的目录并且只有一个neo4j可以获得锁定。
我知道 SpringJUnit4ClassRunner ,但我无法使用它,因为我已经在我的嵌入式服务器中运行了neo4j实例。
@ContextConfiguration(locations = "classpath:/spring/applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
测试应该在随机目录中创建一个neo4j数据库。
问题:
答案 0 :(得分:1)
我现在正在使用基于Java的bean配置:
package com.gentics.sandboxmanager.service;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import org.neo4j.kernel.EmbeddedGraphDatabase;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.config.EnableNeo4jRepositories;
import org.springframework.data.neo4j.config.JtaTransactionManagerFactoryBean;
import org.springframework.data.neo4j.config.Neo4jConfiguration;
import org.springframework.data.neo4j.support.Neo4jExceptionTranslator;
import org.springframework.data.neo4j.support.Neo4jTemplate;
import org.springframework.data.neo4j.support.mapping.Neo4jMappingContext;
@EnableNeo4jRepositories(basePackages = "com.gentics.sandboxmanager.repository")
@Configuration
public class Neo4jConfig extends Neo4jConfiguration {
private static File databaseLocation;
private static EmbeddedGraphDatabase neo4jDB;
/**
* Returns the neo4j database
*
* @return
*/
public static EmbeddedGraphDatabase getNeo4jDatabase() {
return neo4jDB;
}
@Bean
public EmbeddedGraphDatabase graphDatabaseService() throws IOException {
// TODO use properties so that the app does not use a temp dir
databaseLocation = Files.createTempDirectory("neo4j").toFile();
databaseLocation.deleteOnExit();
neo4jDB = new EmbeddedGraphDatabase(databaseLocation.getAbsolutePath());
return neo4jDB;
}
@Bean
public Neo4jTemplate neo4jTemplate() throws IOException {
return new Neo4jTemplate(graphDatabaseService());
}
@Bean
public Neo4jMappingContext neo4jMappingContext() {
return new Neo4jMappingContext();
}
@Bean
public JtaTransactionManagerFactoryBean transactionManager() throws Exception {
return new JtaTransactionManagerFactoryBean(graphDatabaseService());
}
@Bean
public Neo4jExceptionTranslator exceptionTranslator() {
return new Neo4jExceptionTranslator();
}
}
每个JerseyTest测试用例都将重启webapp。因此neo4j将始终使用空的neo4j数据库。
添加个人链接: