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

在Spring Boot测试中排除配置

司寇望
2023-03-14

我在maven项目中有以下设置。生产性代码的配置类:

package com.example;
@Configuration
public class MyConfiguration {
    @Bean
    public A beanA() {
      return new A();
    }
    ...
}

然后我有一个测试,它有一个内部配置:

package com.example;
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {MyConfiguration.class, SpringConfigurationTest.MyTestConfiguration.class})
public class SpringConfigurationTest {
    @TestConfiguration
    static class MyTestConfiguration {
        @Bean
        @Primary
        public A beanA() {
          return mock(A.class);
        }    
    }
}

这门课的测验做得很好。那么我在子包中确实有另一个测试类:

package com.example.sub;
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {MyConfiguration.class, AnotherSpringConfigurationTest.MyTestConfiguration.class})
public class AnotherSpringConfigurationTest {
    @TestConfiguration
    static class MyTestConfiguration {
        @Bean
        public B beanB() {
          return new B()
        }    
    }
}

如何避免其他测试中的配置类“泄露”到其他测试中?

我在Spring Boot 1.4.1中看到了使用Spring profiles的集成测试的Spring-boot默认配置文件,而我使用的是Spring Boot 2.0.1。但我相信这是可以做到的。

我能想到的另一种方法是使用组件扫描来获取上下文并排除所有我不想要的上下文,但这有点麻烦,因为我更喜欢定义我想要使用的东西而不是不应该使用的东西的方法。

Spring Boot2是否有一个简单而优雅的解决方案来避免冲突的上下文配置?

共有1个答案

广瑞
2023-03-14

首先,我不喜欢将一个config类放在另一个类中的想法。我不知道这是不是做得很好,我对Spring有点陌生。但我会这样做:

第一个配置文件:

@Configuration
@Import(MyConfiguration.class)
public class MyTestConfiguration {
    @Bean
    @Primary // added to let know on @Autowired to use this one instead of the one in first MyConfiguration.class
    public A beanA() {
      return mock(A.class);
    }    
}

第二个配置文件:

@Configuration
@Import(MyConfiguration.class)
public class MyOtherTestConfiguration {
    @Bean
    public B beanB() {
      return new B()
    }    
}

第一个测试类:

package com.example;
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = MyTestConfiguration.class)
public class SpringConfigurationTest {

}

第二个测试类:

package com.example.sub;
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = MyOtherTestConfiguration.class)
public class AnotherSpringConfigurationTest {

}
 类似资料:
  • 我有一个测试,包括jUnit测试和testng测试。它工作正常时,我运行'mvn测试'从父pom,但测试失败时,在jenkins建设。我需要一个方法来跳过詹金斯的测试。

  • 我已经创建了一个应用程序使用Springboot和Hibernate,我想配置它的单元测试。 首先,这是DAO接口。 这是DAO接口的实现 然后我创建了一个测试类,如下所示 我已经将application.properties文件放在test和src目录的资源中。 我尝试运行此单元测试用例,但由于以下错误而失败: 那么我可以知道为DAO层配置单元测试的最佳方法吗?

  • 我有一个Java MultiMaven项目,我为每个子模块配置了Jacoco maven插件,以排除我不想要覆盖报告的文件。我认为我成功了,因为我在Jacoco生成的html报告中看不到我排除的这些文件。我假设这些类文件被排除在Jacoco.exec文件之外。现在,我在SonarQube中使用这些累积的Jacoco.exec文件,并看到了所有子模块的覆盖,但是,当我进入类详细信息时,我再次看到了我

  • 在我的根项目中,我有两个子项目具有这种包结构。 在项目1中,我有一个用大规定义的类,就像这样 问题是,如果我运行该测试,它也会分析项目2中的所有内容。我如何排除包com.app.api?

  • 我们有一个EAR项目,它组装一个WAR文件,并有一些JAR文件作为依赖项。EAR的POM.xml如下所示: 作为JAR包含在EAR中的包impl中有一些测试类。不幸的是,在组装EAR时,这些测试类与JAR捆绑在一起。除了facet之外,Maven应该包含测试类,当EAR被组装时,我怎样才能在JAR中排除这些测试类呢? Package-impl中的所有测试类都在src/test/java Sourc

  • 本文向大家介绍Springboot Cucumber测试配置介绍详解,包括了Springboot Cucumber测试配置介绍详解的使用技巧和注意事项,需要的朋友参考一下 目前Spring-boot成为了java开发的主流框架,Cucumber作为一款支持dsl的自动化测试工具,很适合用户编写DSL优化过的单元测试等测试用例。本文将讲解如何在SpringBoot中配置Cucumber进行自动化测试