Junit 正在寻找一个Neo4j示例,该示例是一个使用嵌入式驱动程序的存储库单元测试

Junit 正在寻找一个Neo4j示例,该示例是一个使用嵌入式驱动程序的存储库单元测试,junit,neo4j,spring-data-neo4j,Junit,Neo4j,Spring Data Neo4j,我一直在努力为我在应用程序中构建的Neo4j存储库构建一个单元测试(工作正常)。目前我有一个类(UserRepositoryTest)和一个测试方法。我还有一个配置文件,在其中使用嵌入式驱动程序创建SessionFactory 我得到的错误是: Caused by: java.lang.AbstractMethodError: Method org/neo4j/ogm/drivers/embedded/driver/EmbeddedDriver.newTransaction(Lorg/neo4j

我一直在努力为我在应用程序中构建的Neo4j存储库构建一个单元测试(工作正常)。目前我有一个类(UserRepositoryTest)和一个测试方法。我还有一个配置文件,在其中使用嵌入式驱动程序创建SessionFactory

我得到的错误是:

Caused by: java.lang.AbstractMethodError: Method org/neo4j/ogm/drivers/embedded/driver/EmbeddedDriver.newTransaction(Lorg/neo4j/ogm/transaction/Transaction$Type;Ljava/lang/Iterable;)Lorg/neo4j/ogm/transaction/Transaction; is abstract
  at org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver.newTransaction(EmbeddedDriver.java)
  at org.neo4j.ogm.session.transaction.DefaultTransactionManager.openTransaction(DefaultTransactionManager.java:68)
  at org.neo4j.ogm.session.Neo4jSession.beginTransaction(Neo4jSession.java:524)
  at org.springframework.data.neo4j.transaction.Neo4jTransactionManager.doBegin(Neo4jTransactionManager.java:179)
测试代码为:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {TestConfiguration.class})
@DataNeo4jTest
@EnableTransactionManagement
public class UserRepositoryTest {


    @Autowired
    private UserRepository userRepository;

    @Autowired
    private SessionFactory sessionFactory;

    Session session;

    List<UserEntity> users = new ArrayList<UserEntity>();

    @Before
    public void setUp() {
        users.add(createNewUserEntity(222222, "Moti Ben-Yosef", "moti.ben-yosef", "moti.ben-yosef@company.com"));
        users.add(createNewUserEntity(222223, "David Ben-Gurion", "david.ben-gurion", "david.ben-gurion@company.com"));
        users.add(createNewUserEntity(222224, "Golan Eyal", "golan.eyal", "golan.eyal@company.com"));
        users.add(createNewUserEntity(222225, "Moshe Haim", "moshe.haim", "moshe.haim@company.com"));
        users.add(createNewUserEntity(222226, "Haim Yavin", "haim.yavin", "haim.yavin@company.com"));

        session = sessionFactory.openSession();

        session.query("match (u:User) where u.Id >= 222222 and u.Id <= 222226 detach delete(u)", new HashMap<String, Object>() );

        for (UserEntity u : users) {
            session.save(u);
        }
    }

    private UserEntity createNewUserEntity(long id, String name, String username, String email) {
        UserEntity u = new UserEntity();
        u.setUserId(id);
        u.setName(name);
        u.setUsername(username);
        u.setEmail(email);

        return u;
    }

    /**
     * Test of findByTitle method, of class UserRepository.
     */
    @Test
    public void testFindUserById() {
        for (UserEntity u : users) {
            Optional<UserEntity> result = userRepository.findById(u.getUserId());
            Assert.assertNotNull("result = null", result);
            Assert.assertTrue("No User returned", result.isPresent());
            UserEntity user = result.get();
            Assert.assertEquals("name mismatch", u.getName(), user.getName());
        }
    }
}
任何帮助都将不胜感激


谢谢

请参阅此内容,并确保您使用的是兼容库。

谢谢您的回复。我查了图书馆,据我所知,我用的是最新的东西。这张表唯一令人困惑的地方是:“螺栓版本”。我猜他们指的是neo4j bolt,我使用的是3.5.5,但无论如何都不相关,因为测试使用的是嵌入式驱动程序。更新:我们最终使用的测试容器基本上可以启动docker映像,所以neo4j和其他一些需要的服务。然后将一些数据加载到neo4j中,并使用Rest-assured运行组件测试。是的,这并不完全是单元测试,但最终结果更好,也从覆盖率的角度来看。
@Configuration
@EnableNeo4jRepositories(basePackages = "com.company.someservice.repository")
@EnableTransactionManagement
public class TestConfiguration {
@Bean
public SessionFactory sessionFactory() {
EmbeddedDriver driver = new EmbeddedDriver(graphDatabaseService());
return new SessionFactory(driver, "com.company.someservice.domain");
}

@Bean
public PlatformTransactionManager transactionManager() {
    return new Neo4jTransactionManager(sessionFactory());
}

@Bean
public GraphDatabaseService graphDatabaseService() {
    return new GraphDatabaseFactory().newEmbeddedDatabase(new File("test_graph.db"));
}