Spring Boot中的存储库测试导致未知实体异常

时间:2019-02-26 07:06:47

标签: unit-testing spring-boot spring-data-jpa integration-testing junit4

  
      
  • com.mohendra.user

         
        
    • 服务器      
          
      • Application.class //主类
      •   
    •   
    • package2

    •   
    • package3

           
          
      • 域      
            
        • 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尝试扫描程序包中的实体,但是它们都不起作用。 我不能更改文件夹结构使其成为标准文件,因为这不是我的项目。有解决方案吗?

1 个答案:

答案 0 :(得分:0)

Application类应位于根包中。这样一来,您将不需要任何@CompontenScan或@EntityScan,因为Spring Boot会扫描根软件包下的所有内容

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

您必须决定要使用哪个测试片。您有三个:

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

但是我认为您只想要@DataJpaTest