mardi 15 décembre 2020

Java Spring Data Tests class persistence problem with H2 DB

I have a test class that contains two method tests. These test methods are executed with a certain order using @Order annotaion which works well. The first method inserts a known value in h2 that will have id = 21 (trust me indeed, on startup 20 values are created by me when spring starts up, in the spring application configuration class annotated @SpringBootApplication), here is the inserted value in test layer :

User userStub = new User("prenom21", "Nom21"))

  • The second method has to read the inserted value but i get a null object. Maybe i did something wrong, but i would like to know what.
  • The script is available here for viewing or download (you can run it to see the error) : https://github.com/userInterview/LoizSpringRestPersistenceTests/blob/main/src/test/java/org/loiz/demo/LoizPersistenceTest.java

  • Below, At code line written in bold case (line 65), i should have an object in UserRead object created by the first test method but i have null object. Is this normal ?

    @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));
         }
  • It should not be null because the first method inserts/creates that record in h2. See Below :

    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));
        }
    
    }

I would appreciate some light about that problem :)

Aucun commentaire:

Enregistrer un commentaire