H2 DB的Java Spring Data Tests类持久性问题

吉米·马格里宾(Jimmy Maghrebien)

我有一个包含两个方法测试的测试类。这些测试方法使用@Order注释按一定顺序执行,效果很好。第一种方法在h2中插入一个ID值为21的已知值(确实,相信我,在启动时,我在spring启动时创建了20个值,在带有@SpringBootApplication的spring应用程序配置类中),这是在测试层:

用户userStub =新用户(“ prenom21”,“ Nom21”))

  • 第二种方法必须读取插入的值,但是我得到一个空对象。也许我做错了什么,但我想知道是什么。
  • 该脚本可在此处查看或下载(可以运行以查看错误):https : //github.com/userInterview/LoizSpringRestPersistenceTests/blob/main/src/test/java/org/loiz/demo/LoizPersistenceTest。爪哇

  • 下面,在写入粗体(线65)的代码行,我应该有一个对象UserRead由第一测试方法创建的对象,但我对象。这正常吗?

    @Test
         @Order(2) 
         @DisplayName("Test de suppression du user \"prenom21 Nom21\"")
         public void readShouldMapCorrectly() throws Exception {
             User userStub = new User(idStub, "prenom21", "Nom21");          
             User UserRead  = this.testEntityManager.find(User.class, idStub) ;
             Assert.assertTrue(userStub.equals(UserRead));
         }
  • 它不应为null,因为第一个方法在h2中插入/创建该记录。见下文 :

    package org.loiz.demo;
    
    import org.assertj.core.api.BDDAssertions;
    import org.junit.Assert;
    import org.junit.jupiter.api.DisplayName;
    import org.junit.jupiter.api.MethodOrderer;
    import org.junit.jupiter.api.Test ;
    import org.junit.jupiter.api.TestMethodOrder;
    import org.junit.jupiter.api.Order ;
    
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
    import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import demo.LoizBootSpringDemoApplication;
    import demo.crepository.UserRepositoryInterface;
    import demo.dmodel.User;
    
    //Test de la couche de persistence
    @RunWith(SpringRunner.class)
    @DataJpaTest
    @ContextConfiguration(classes = { LoizBootSpringDemoApplication.class})
    @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
    public class LoizPersistenceTest 
    {
        
        @Autowired
        private TestEntityManager testEntityManager;
    
        @Autowired
        private UserRepositoryInterface repository; 
    
        private static Long idStub ;
        
        @Test
        @Order(1)   
        @DisplayName("Test de sauvegarde d\'un user \"prenom21 Nom21\"")
        public void saveShouldMapCorrectly() throws Exception {
            
            User userStub = new User("prenom21", "Nom21");                       
            
            User UserSaved = this.testEntityManager.persistFlushFind(userStub);
            
            BDDAssertions.then(UserSaved.getId()).isNotNull();                    
            idStub = UserSaved.getId() ;
            
            User UserRead = this.testEntityManager.find(User.class, idStub) ;       
            
            BDDAssertions.then(UserSaved.getFirstName()).isNotBlank();
            BDDAssertions.then(UserSaved.getFirstName()).isEqualToIgnoringCase("prenom21");
            
    
            BDDAssertions.then(UserSaved.getLastName()).isEqualToIgnoringCase("Nom21");
            BDDAssertions.then(UserSaved.getLastName()).isNotBlank();
        }
    
        @Test
        @Order(2) 
        @DisplayName("Test de suppression du user \"prenom21 Nom21\"")
        public void readShouldMapCorrectly() throws Exception {
            User userStub = new User(idStub, "prenom21", "Nom21");          
            User UserRead  = this.testEntityManager.find(User.class, idStub) ;
            Assert.assertTrue(userStub.equals(UserRead));
        }
    
    }

我希望对这个问题有所了解:)

麦克斯韦

在运行这些测试时,spring在每种测试方法之后都会执行完整的回滚。在执行写入的测试中,添加

@Rollback(false)

org.springframework.test.annotation.Rollback;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring Boot CRUD REST API + Spring Data JPA + H2 DB:在测试中获得 NPE 而不是在 Postman

使用H2的Java Spring项目中的查询问题

带有JPA和H2的Spring Boot:创建了DB文件,但是没有任何持久化

Spring Batch中H2 db的元表

我的 Spring 数据库 (H2) 不持久

Spring Boot + H2 + JPA项目的问题

Spring H2驱动程序问题

Spring Data JPA + H2嵌入式持久性:CrudRepository.save仅在重新启动时保存到内存中,不再看到更改

H2数据库Java堆问题

saveOrUpdate 在带有 H2 数据库的 Spring Data 中不起作用

Spring JPA + H2 DB:保存字段值不区分大小写

Spring的嵌入式H2数据源和DB_CLOSE_ON_EXIT

Spring H2 Test DB在每次测试之前不会重置

如何使用 JDBC 为 Spring Boot 会话自动初始化 H2 db 架构

H2数据库-Java的OffsetDateTime和h2类型之间的映射

我如何将作业从Spring项目持久保存到H2数据库

通过 spring-boot [JAVA] 从 h2 数据库获取数据

尝试从Java Spring Boot中的H2数据库获取相关实体

HTML布局中的H2数据库控制台:片段(Spring Boot + Java)

Spring Integration 的带有 H2 适配器的 Java DSL

H2 數據庫列和值不收斂 JAVA Spring

Spring Boot中的外键问题-H2数据库

从db2数据库Spring Boot填充内存数据库中的h2

如何从Java和H2 DB连接到H2数据库

h2类的appendChild

从HSQL到H2的迁移能否解决HSQL DB中未使用空间的问题?

Spring Boot 2.2.1 H2失败?

在Spring Boot下执行H2

Spring Boot H2数据转换