unit-testing - 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 尝试扫描包中的实体,但它们都不起作用。我无法更改我的文件夹结构以使其成为标准,因为它不是我的项目。有解决办法吗?
解决方案
Application 类应该在根包中。这样你就不需要任何@CompontenScan 或@EntityScan,因为 Spring Boot 会扫描你的根包下的所有内容
因此我建议放入Application.class
包装中com.mohendra.user
你必须决定你想要哪个测试片。你有三个:
@SpringBootTest(classes = Application.class)
@DataJpaTest
@RestClientTest
但我假设你只想要@DataJpaTest