首页 > 解决方案 > Spring boot repository.save() 在测试类中不起作用

问题描述

我有这个测试课:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = { CrimeServiceDBImpl.class, CrimeController.class, Crime.class })
@ComponentScan("com.springmiddleware")
@EntityScan(basePackages = {"com.springmiddleware.entities"})
@DataJpaTest
@AutoConfigureTestDatabase(replace = Replace.NONE)
@EnableJpaRepositories("com.springmiddleware")
public class TestCrimeServiceDB {


    @Autowired
    private CrimeServiceDBImpl service = new CrimeServiceDBImpl();

    @Test
    public void getAll() {
        try {
            List<Crime> list = this.service.getAllCrimes();
            assertTrue(list.size()!=0);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

服务类的方法getAllCrimes()就是这样做的:

@Service
public class CrimeServiceDBImpl implements CrimeService{

    @Autowired
    private CrimeRepository repository;

    private List<Crime> list = new ArrayList<Crime>();



    public CrimeServiceDBImpl() {
        list = UtilityMethods.readFromCSV();
    };


    @Override
    public List<Crime> getAllCrimes() throws IOException {
        repository.saveAll(list);
        return this.repository.findAll();
    }

如果我在运行应用程序时调用此方法,它会正确地将我的所有对象添加到数据库中,但是当从测试中调用它时,它不会添加任何内容,但不会引发异常。

标签: spring-bootjpaspring-data-jpa

解决方案


您使用的是哪个数据库?您的意思是测试完成后数据没有保存在数据库中吗?这是因为测试总是在完成工作后执行回滚/清理。


推荐阅读