intellij-idea - Spring Data Neo4j JUnit4设置

标签 intellij-idea gradle neo4j junit4 spring-data-neo4j-4

我承认我是Java的工作方式的新手,而试图运行一个简单的单元测试我完全迷失了。

我正在构建一个数据访问库,并希望对其进行单元测试。我正在使用Spring Data Neo4j 4.0.0.BUILD-SNAPSHOT,因为我需要连接到现实世界中的远程Neo4j服务器。

经过一整天的错误处理后,我到达了考试类:

@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()会引发异常“未为作用域“ session ”注册任何作用域”
我不知道是否需要配置类,但是没有它,我的测试类将无法工作,因为Spring需要@ContextConfiguration,并且我希望Spring提供的所有DI功能(以及其他功能)。

如何使测试与Spring一起使用?

最佳答案

您可以使用InProcessServer,它是一个内存数据库:

@Bean
public Neo4jServer neo4jServer() {
    return new InProcessServer();
}

由于您的测试未在网络容器中运行,因此请忽略 session 范围。例如: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

在测试类PersonRepositoryTest中,您无需构造数据库的实例,您的测试将针对相同的InProcessServer运行。
这是一个示例:https://github.com/neo4j-examples/sdn4-cineasts/blob/4.0-RC1/src/test/java/org/neo4j/cineasts/domain/DomainTest.java

关于intellij-idea - Spring Data Neo4j JUnit4设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30649663/

相关文章:

gradle - 如何将gradle构建java项目上传到 Sonar 服务器

android - 如何将Google Services插件导入库?

java - Neo4j Spatial 导致生命周期异常

gradle - 如何获取Gradle测试用例控制台输出

java - 将 Gradle 项目导入 IntelliJ IDEA 时如何避免重复库

java - IntelliJ IDEA-java : error: invalid source release: 18

java - Gradle-使用本地JDK的功能

php - Neo4J 和 Laravel 4 模型

java - Neo4J 中的 Gremlin 遍历

java - 为什么在使用 Play 时从数据库获取 List<String> 时它是空的?