测试与数据库的连接,测试通过但没有在数据库中创建新实例

Testing connectiong with db, tests passes but no new instance in db created

我想做什么:我想测试我的应用程序是否与数据库正确连接。为此,我使用了这些教程:http://www.baeldung.com/spring-boot-testing http://www.baeldung.com/spring-testing-separate-data-source 所以我正在创建新的 testUser,保存它并检查 userName 找到的用户是否等于我保存的用户。

什么不起作用: 即使测试通过,数据库中也没有新用户出现。我不知道为什么。有什么建议吗?

测试:

package com.shareabook.integration.user;

import com.shareabook.constants.initialNumberOfPoints;
import com.shareabook.model.Points;
import com.shareabook.model.User;
import com.shareabook.repository.PointsRepository;
import com.shareabook.repository.RoleRepository;
import com.shareabook.repository.UserRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.Arrays;

import static org.assertj.core.api.Assertions.assertThat;

@RunWith(SpringRunner.class)
@DataJpaTest
public class userTest {
    @Autowired
    private UserRepository userRepository;

    @Autowired
    private RoleRepository roleRepository;

    @Autowired
    private PointsRepository pointsRepository;

    private BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();

    @Test
    public void whenFindByUserName_thenReturnUser() {
        //given
        User testUser = new User();

        // Creates new points instance
        Points points = new Points();
        points.setAmountOfPoints(initialNumberOfPoints.INITIAL_NUMBER_OF_POINTS.getInitialNumberOfPoints());
        pointsRepository.save(points);
        int tempId = points.getId();

        testUser.setUserName("userName");
        testUser.setFirstName("firstName");
        testUser.setLastName("lastName");
        testUser.setPassword(passwordEncoder.encode("P@ssword123"));
        testUser.setEmail("emal@email.com");
        testUser.setIsBlocked(false);
        testUser.setIdpoints(tempId);
        testUser.setRoles(Arrays.asList(roleRepository.findByRole("USER")));

        userRepository.save(testUser);

        //when
        User found = userRepository.findByUserName(testUser.getUserName());

        //then
        assertThat(found.getUserName()).isEqualTo(testUser.getUserName());


    }
}

------编辑--------- 在评论中提出有用的建议后,我稍微更改了测试,现在它按预期工作了。

package com.shareabook.integration.user;

import com.shareabook.constants.initialNumberOfPoints;
import com.shareabook.model.Points;
import com.shareabook.model.User;
import com.shareabook.repository.PointsRepository;
import com.shareabook.repository.RoleRepository;
import com.shareabook.repository.UserRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.Arrays;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

@RunWith(SpringRunner.class)
@SpringBootTest
public class userTest {
    @Autowired
    private UserRepository userRepository;

    @Autowired
    private RoleRepository roleRepository;

    @Autowired
    private PointsRepository pointsRepository;

    private BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();

    @Test
    public void whenFindByUserName_thenReturnUser() {
        //given
        User testUser = new User();

        // Creates new points instance
        Points points = new Points();
        points.setAmountOfPoints(initialNumberOfPoints.INITIAL_NUMBER_OF_POINTS.getInitialNumberOfPoints());
        pointsRepository.save(points);
        int tempId = points.getId();

        testUser.setUserName("userName");
        testUser.setFirstName("firstName");
        testUser.setLastName("lastName");
        testUser.setPassword(passwordEncoder.encode("P@ssword123"));
        testUser.setEmail("emal@email.com");
        testUser.setIsBlocked(false);
        testUser.setIdpoints(tempId);
        testUser.setRoles(Arrays.asList(roleRepository.findByRole("USER")));

        userRepository.save(testUser);

        //when
        User found = userRepository.findByUserName(testUser.getUserName());

        //then
        assertNotNull(found);
        assertEquals(testUser.getUserName(), found.getUserName());
    }
}

@DataJpaTest 将配置内存中的嵌入式数据库,扫描@Entity 类 并配置 Spring Data JPA 存储库。

它是事务性的,但会在每次测试结束时回滚!

这就是您的数据库中没有数据的原因。