为了账号安全,请及时绑定邮箱和手机立即绑定

@DataJpaTest 中的存储库初始化为 null

@DataJpaTest 中的存储库初始化为 null

子衿沉夜 2021-06-08 13:01:23
我正在尝试为 Spring Boot 应用程序中的存储库编写一些测试,但是存储库自动装配为null。测试类的代码如下:package jpa.project.repo;import org.junit.Assert;import org.junit.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;import org.springframework.test.context.ContextConfiguration;import jpa.project.entity.Person;@EnableAutoConfiguration@ContextConfiguration(classes = PersonRepo.class)@DataJpaTestpublic class PersonRepoTest {    @Autowired    private PersonRepo personRepoTest;    @Test    public void testPersonRepo() throws Exception {        Person toSave = new Person();        toSave.setPersonId(23);        if (personRepoTest == null) {            System.out.println("NULL REPO FOUND");        }        personRepoTest.save(toSave);        Person getFromDb = personRepoTest.findOne(23);        Assert.assertTrue(getFromDb.getPersonId() == 23);    }}当我在 Eclipse 中将此文件作为 JUnit 测试运行时,打印语句确实被打印出来,这确认了随后出现的空指针异常。我所有的测试都在与主应用程序相同的包中,但这些包在 src/test/java 下。我尝试对包装名称进行一些更改,但这并没有帮助,所以我现在不知道问题出在哪里。为什么 repo 被初始化为 null?
查看完整描述

2 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

这是使用@DataJpaTest 和 TestEntityManager 进行单元测试的工作示例:


PersonRepo 扩展 JpaRepository 并具有 @Repository 注释


我在我的项目中使用这种方法,如果您的所有配置都有效并且应用程序可以正常运行,则测试将通过。


@RunWith(SpringRunner.class)

@DataJpaTest

public class RepositoryTest {


    @Autowired

    TestEntityManager entityManager;


    @Autowired

    PersonRepo sut;


    @Test

    public void some_test() {

        Person toSave = new Person();

        toSave.setPersonId(23);


        entityManager.persistAndFlush(toSave);


        Person getFromDb = sut.findOne(23);

        Assert.assertTrue(getFromDb.getPersonId() == 23);

    } 

}


查看完整回答
反对 回复 2021-06-23
  • 2 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信