首页 > 解决方案 > Spring Boot 中的存储库测试导致未知实体异常

问题描述

  • com.mohendra.user

    • 服务器
      • Application.class //主类
    • 包2

    • 包3

      • 领域
        • Campaigns.class
        • SmsDomainPackage.class
      • 存储库
        • CampaignRepository.class

以上是我的文件夹结构,我正在尝试使用 spring dataJpaTest 测试 CampaignRepository ,我已经编写了以下测试

@ComponentScan(basePackages = "com.mohendra.user")
@EntityScan(basePackageClasses = SmsDomainPackage.class)
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@DataJpaTest
@RestClientTest
public class CampaignRepositoryTest {

    @Autowired
    private TestEntityManager entityManager;

    @Autowired
    private CampaignRepository repository;

    @Before
    public void setUp() throws Exception {
    }

    @Test
    public void findByCode() {
        Campaigns campaigns = new Campaigns();
        campaigns.setName("Name");
        campaigns.setCode("HELP123");
        campaigns.setStartDate(new Date());
        campaigns.setEndDate(new Date());
        this.entityManager.persist(campaigns);

        Campaigns campaigns1 = repository.findByCode("HELP123");
        System.out.println();
    }
}

该测试给出了一个例外

java.lang.IllegalArgumentException:未知实体:com.mohendra.user.package3.domain.Campaigns

如您所见,我还使用了@ComponentScan,并且我还使用了@EntityScan 尝试扫描包中的实体,但它们都不起作用。我无法更改我的文件夹结构以使其成为标准,因为它不是我的项目。有解决办法吗?

标签: unit-testingspring-bootspring-data-jpaintegration-testingjunit4

解决方案


Application 类应该在根包中。这样你就不需要任何@CompontenScan 或@EntityScan,因为 Spring Boot 会扫描你的根包下的所有内容

因此我建议放入Application.class包装中com.mohendra.user

你必须决定你想要哪个测试片。你有三个:

@SpringBootTest(classes = Application.class)
@DataJpaTest
@RestClientTest

但我假设你只想要@DataJpaTest


推荐阅读