当前位置: 首页 > 知识库问答 >
问题:

基于Spring-Boot模块的集成测试

岑畅
2023-03-14

我有一个多模块的弹簧引导项目。我想知道如何设置集成测试来测试Spring数据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
    }

}

共有1个答案

朱宜
2023-03-14

正如Marten提到的,@integrationtest只应在您需要针对部署的Spring引导应用程序(例如,部署在嵌入式Tomcat、Jetty或Undertow容器中)进行测试时使用。因此,如果您的目标是孤立地测试存储库层,则不应使用@integrationtest

另一方面,如果您的测试需要特定的Spring引导功能(与标准Spring Framework功能、语义和默认值不同),那么实际上您希望使用@SpringApplicationConfiguration而不是@ContextConfiguration来注释测试类。原因是@SpringApplicationConfiguration预配置了特定于Spring引导的SpringApplicationContextLoader

此外,如果您希望存储库层集成测试运行得更快(即,没有Spring引导的全部开销),您可以选择排除使用@enableAutoConfiguration注释的配置类,因为这将自动配置类路径中找到的每个自动配置候选项。因此,例如,如果您只想让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 { /* ... */ }
 类似资料:
  • 下面是我的应用程序主类: 但当我运行这个程序时,我得到了一个非常奇怪的错误: groovyx.net.http.restclient:解析'application/json'响应时出错

  • 与Oauth2和spring Security集成测试有问题...在将Oauth2配置添加到代码库之前,集成测试工作正常 设置: 具有受保护数据的客户端服务器还包含权限列表,使用Spring Security和OAuth2 提供访问令牌和执行身份验证的身份验证服务器 工作流: null Oauth2配置: 自定义安全逻辑: 还有一个:

  • 看起来它与我们在正常项目中的websecurity配置有冲突。这是文件: 我尝试添加来修复上述问题,但最终仍然以结束

  • 情况和问题:在Spring Boot中,我如何将一个或多个模拟类/bean注入应用程序以进行集成测试?在StackOverflow上有一些答案,但它们集中在Spring Boot 1.4之前的情况,或者只是不适合我。 背景是,在下面的代码中,设置的实现依赖于第三方服务器和其他外部系统。设置的功能已经在单元测试中测试过了,所以对于完整的集成测试,我想模拟出对这些服务器或系统的依赖,只提供虚拟值。 M

  • 我有以下测试类: 这将导致HTTP 200而不是401。我启用了组件扫描和自动配置,并在我的SecuityConfiguration类中配置了Spring Security性,如下所示: 如果我使用RestTemplate访问,那么我将获得预期的行为(HTTP 401)。 null 因此,我不希望手动添加安全过滤器链,因为我(不正确?)期望这“只是工作”由于自动配置魔术在Spring引导? 提前谢

  • 对于集成测试,它更棘手,我们使用failsafe和集成测试生成文件,该文件由Sonar扫描。我的问题是,集成测试位于中,它只显示了对控制器内部的类的集成测试的测试覆盖范围,而不显示对另一个模块(如service module)中的类的集成测试的测试覆盖范围。因此,集成测试的总体测试覆盖率增加到21%,而不是35%+。 如果集成测试在中,那么是否可以配置sonar和jacoco来测量所有类的集成测试