用于测试服务的临时 Neo4j 数据库
Temporary Neo4j database to test services
我正在使用 Neo4j 数据库构建一个 Spring 应用程序。
我有一些服务,它们实现了基本的数据库功能,例如保留用户或通过用户名查找用户。
由于我实施了一些限制,例如无法删除不存在的用户,我想测试我的服务。
我的愿望是进行一个构建临时 Neo4j graphdb 的测试,如 http://neo4j.com/docs/stable/tutorials-java-unit-testing.html 中所述。
但另外我想将我的 UserService 自动连接到测试中,对临时数据库执行一些操作,最后再次销毁临时数据库。
我期待我可以用 TestConfigurations 解决这个问题,但由于我对 Spring 或 Neo4j 没有真正的经验,所以它并不那么简单。
我有以下配置
@Configuration
@EnableNeo4jRepositories(basePackages = "de.myapp")
@EnableTransactionManagement
public class UserTestConfiguration extends Neo4jConfiguration{
@Bean
public UserService userService() {
return new UserBean();
}
@Bean
public Neo4jServer neo4jServer() {
//This is probably wrong since i really want to connect to the impermanent db
return new RemoteServer("http://localhost:7474");
}
@Bean
public SessionFactory getSessionFactory() {
return new SessionFactory("de.myapp");
}
}
以及下面的测试-class
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=TSUserTestConfiguration.class)
public class TSUserBeanTest {
private GraphDatabaseService graphDb;
@Autowired
private TSUserService userService;
@Before
public void prepareTestDatabase() {
graphDb = new TestGraphDatabaseFactory().newImpermanentDatabase();
}
@After
public void destroyTestDatabase() {
graphDb.shutdown();
}
@Test
public void createUserTest() {
TSUser user = new TSUser("TestUser", "TestEmail");
//This should create the user in the impermanent db
userService.persistUser(user);
//assert stuff here
}
}
但是,我在销毁中得到了 graphDB 的 NullPointer 异常,我什至不确定我的方法是否正确。
有人可能有这种情况的例子吗?
欢迎使用更好的方法在临时数据库上对我的服务进行集成测试。
感谢和问候
Urr4
看起来您正在使用 SDN 4.x。 - 哪个版本?
SDN 4.0 发布
您将使用 InProcessServer
而不是 RemoteServer
,它会在可用的本地端口上内部启动 CommunityNeoServer
的新实例。它还可以管理关闭,因此非常适合并推荐用于测试。
在您的配置中,使用它代替 RemoteServer
-
@豆子
public Neo4jServer neo4jServer() {
return 新的 InProcessServer();
}
所需的依赖项记录在 reference guide 中。
进一步阅读,本blog post.
中的测试部分
SDN 4.1 M1
InProcessServer
不再可用,您需要使用嵌入式驱动程序,它会为您设置 Impermanent 图形数据库。
ogm.properties
对于临时嵌入式存储应该包含-
driver=org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver
所需的依赖项记录在 reference guide 中。
可以找到升级测试以使用 SDN 4.1 的示例 here.
我使用以下配置进行测试
@Configuration
@ComponentScan("my.services")
@EnableNeo4jRepositories("my.repos")
public class MyTestingConfiguration extends Neo4jConfiguration {
@Override
@Bean
public Neo4jServer neo4jServer() {
return new InProcessServer();
}
@Override
public SessionFactory getSessionFactory() {
return new SessionFactory("de.tsbros");
}
}
及以下class进行测试
@ContextConfiguration(classes = {MyTestingConfiguration.class})
@RunWith(SpringJUnit4ClassRunner.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class TSUserBeanTest {
@Autowired
private MyService myService;
//testing here
}
使用以下依赖项
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
<version>${sdn.version}</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-kernel</artifactId>
<version>${neo4j.version}</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.neo4j.app</groupId>
<artifactId>neo4j-server</artifactId>
<version>${neo4j.version}</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm</artifactId>
<version>${neo4j-ogm.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.neo4j.test</groupId>
<artifactId>neo4j-harness</artifactId>
<version>${neo4j.version}</version>
<scope>test</scope>
</dependency>
一切都像描述的那样here
就像一个魅力。
我正在使用 Neo4j 数据库构建一个 Spring 应用程序。 我有一些服务,它们实现了基本的数据库功能,例如保留用户或通过用户名查找用户。 由于我实施了一些限制,例如无法删除不存在的用户,我想测试我的服务。 我的愿望是进行一个构建临时 Neo4j graphdb 的测试,如 http://neo4j.com/docs/stable/tutorials-java-unit-testing.html 中所述。 但另外我想将我的 UserService 自动连接到测试中,对临时数据库执行一些操作,最后再次销毁临时数据库。 我期待我可以用 TestConfigurations 解决这个问题,但由于我对 Spring 或 Neo4j 没有真正的经验,所以它并不那么简单。
我有以下配置
@Configuration
@EnableNeo4jRepositories(basePackages = "de.myapp")
@EnableTransactionManagement
public class UserTestConfiguration extends Neo4jConfiguration{
@Bean
public UserService userService() {
return new UserBean();
}
@Bean
public Neo4jServer neo4jServer() {
//This is probably wrong since i really want to connect to the impermanent db
return new RemoteServer("http://localhost:7474");
}
@Bean
public SessionFactory getSessionFactory() {
return new SessionFactory("de.myapp");
}
}
以及下面的测试-class
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=TSUserTestConfiguration.class)
public class TSUserBeanTest {
private GraphDatabaseService graphDb;
@Autowired
private TSUserService userService;
@Before
public void prepareTestDatabase() {
graphDb = new TestGraphDatabaseFactory().newImpermanentDatabase();
}
@After
public void destroyTestDatabase() {
graphDb.shutdown();
}
@Test
public void createUserTest() {
TSUser user = new TSUser("TestUser", "TestEmail");
//This should create the user in the impermanent db
userService.persistUser(user);
//assert stuff here
}
}
但是,我在销毁中得到了 graphDB 的 NullPointer 异常,我什至不确定我的方法是否正确。 有人可能有这种情况的例子吗? 欢迎使用更好的方法在临时数据库上对我的服务进行集成测试。
感谢和问候 Urr4
看起来您正在使用 SDN 4.x。 - 哪个版本?
SDN 4.0 发布
您将使用 InProcessServer
而不是 RemoteServer
,它会在可用的本地端口上内部启动 CommunityNeoServer
的新实例。它还可以管理关闭,因此非常适合并推荐用于测试。
在您的配置中,使用它代替 RemoteServer
-
@豆子 public Neo4jServer neo4jServer() { return 新的 InProcessServer(); }
所需的依赖项记录在 reference guide 中。 进一步阅读,本blog post.
中的测试部分SDN 4.1 M1
InProcessServer
不再可用,您需要使用嵌入式驱动程序,它会为您设置 Impermanent 图形数据库。
ogm.properties
对于临时嵌入式存储应该包含-
driver=org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver
所需的依赖项记录在 reference guide 中。 可以找到升级测试以使用 SDN 4.1 的示例 here.
我使用以下配置进行测试
@Configuration
@ComponentScan("my.services")
@EnableNeo4jRepositories("my.repos")
public class MyTestingConfiguration extends Neo4jConfiguration {
@Override
@Bean
public Neo4jServer neo4jServer() {
return new InProcessServer();
}
@Override
public SessionFactory getSessionFactory() {
return new SessionFactory("de.tsbros");
}
}
及以下class进行测试
@ContextConfiguration(classes = {MyTestingConfiguration.class})
@RunWith(SpringJUnit4ClassRunner.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class TSUserBeanTest {
@Autowired
private MyService myService;
//testing here
}
使用以下依赖项
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
<version>${sdn.version}</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-kernel</artifactId>
<version>${neo4j.version}</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.neo4j.app</groupId>
<artifactId>neo4j-server</artifactId>
<version>${neo4j.version}</version>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm</artifactId>
<version>${neo4j-ogm.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.neo4j.test</groupId>
<artifactId>neo4j-harness</artifactId>
<version>${neo4j.version}</version>
<scope>test</scope>
</dependency>
一切都像描述的那样here 就像一个魅力。