我正在尝试为 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);
}
}
添加回答
举报
0/150
提交
取消