我有一个多模块 Spring-Boot 项目。
我想知道如何设置集成测试来测试 Spring Data JPA 存储库?以下方法因此异常而失败:
HV000183:无法加载“javax.el.ExpressionFactory”。检查类路径上是否有 EL 依赖项。
由于该模块不依赖于Web模块,因此没有可以启动的Web应用程序。
@RunWith(SpringJUnit4ClassRunner.class)
@IntegrationTest
@SpringApplicationConfiguration(classes = TestConfiguration.class)
class CardInfoRepositoryIT {
@Autowired CardInfoRepository cardInfoRepository;
@Test
void testLoadData() {
assert cardInfoRepository.findAll().size() == 1
}
}
正如马丁提到的,@IntegrationTest
仅当您需要针对已部署的 Spring Boot 应用程序进行测试(例如,部署在嵌入式 Tomcat、Jetty 或 Undertow 容器中)时才应使用。因此,如果您的目标是单独测试存储库层,则不应使用@IntegrationTest
.
另一方面,如果您的测试需要特定的 Spring Boot 功能(与标准 Spring 框架功能、语义和默认值相比),那么您实际上需要使用以下注释来注释您的测试类@SpringApplicationConfiguration
代替@ContextConfiguration
。原因是@SpringApplicationConfiguration
预先配置SpringApplicationContextLoader
这是 Spring Boot 特有的。
此外,如果您希望存储库层集成测试运行得更快(即没有 Spring Boot 的全部开销),您可以选择排除带有注释的配置类@EnableAutoConfiguration
因为这会自动配置every在类路径中找到自动配置的候选者。因此,举例来说,如果您只想让 Spring Boot 自动配置嵌入式数据库和 Spring Data JPA(以 Hibernate 作为 JPA 提供程序)以及实体扫描,您可以编写如下测试配置:
@Configuration
@EnableJpaRepositories(basePackageClasses = UserRepository.class)
@EntityScan(basePackageClasses = User.class)
@Import({ DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
public class TestRepositoryConfig {}
然后在您的测试类中使用该配置,如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestRepositoryConfig.class)
@Transactional
public class UserRepositoryTests { /* ... */ }
Regards,
Sam
附注您可能会发现我对以下相关问题的回答也很有用:使用 Spring Boot 禁用单元测试的安全性
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)