首页 文章

用于集成测试的Spring-boot默认配置文件

提问于
浏览
45

Spring-boot使用Spring配置文件(http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html),它允许例如为不同的环境分别配置 . 我使用此功能的一种方法是配置测试数据库以供集成测试使用 . 我想知道是否有必要创建我自己的配置文件'test'并在每个测试文件中明确激活此配置文件?现在我用以下方式做到:

  • 在src / main / resources中创建application-test.properties

  • 在那里编写测试特定配置(现在只是数据库名称)

  • 在每个测试文件中包括:

@ActiveProfiles("test")

有更聪明/更简洁的方式吗?例如,默认测试配置文件?

编辑1:这个问题与Spring-Boot 1.4.1有关

5 回答

  • 50

    据我所知,没有任何内容可以直接解决您的请求 - 但我可以建议一个可以提供帮助的提案:

    您可以使用自己的测试注释,该注释是meta annotation,包含 @SpringBootTest@ActiveProfiles("test") . 因此,您仍然需要专用配置文件,但避免在所有测试中分散配置文件定义 .

    此注释将默认为配置文件 test ,您可以使用元注释覆盖配置文件 .

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    @SpringBootTest
    @ActiveProfiles
    public @interface MyApplicationTest {
      @AliasFor(annotation = ActiveProfiles.class, attribute = "profiles") String[] activeProfiles() default {"test"};
    }
    
  • 23

    另一种方法是定义实际测试类将扩展的基类(抽象)测试类:

    @RunWith(SpringRunner.class)
    @SpringBootTest()
    @ActiveProfiles("staging")
    public abstract class BaseIntegrationTest {
    }
    

    具体测试:

    public class SampleSearchServiceTest extends BaseIntegrationTest{
    
        @Inject
        private SampleSearchService service;
    
        @Test
        public void shouldInjectService(){
            assertThat(this.service).isNotNull();
        }
    }
    

    这允许您提取的不仅仅是 @ActiveProfiles 注释 . 您还可以想象针对不同类型的集成测试的更专业的基类,例如数据访问层与服务层,或功能专业(常见的 @Before@After 方法等) .

  • 35

    您可以将application.properties文件放在test / resources文件夹中 . 在那里你设置

    spring.profiles.active=test
    

    这是运行测试时的默认测试配置文件 .

  • 4

    在我的情况下,我有不同的application.properties取决于环境,如:

    application.properties (base file)
    application-dev.properties
    application-qa.properties
    application-prod.properties
    

    和application.properties包含一个属性spring.profiles.active来选择适当的文件 .

    对于我的集成测试,我在 test/resources 中创建了一个新的 application-test.properties 文件,并使用 @TestPropertySource({ "/application-test.properties" }) 注释这是负责根据我对这些测试的需求选择我想要的application.properties的文件

  • 1

    另一种编程方式:

    import static org.springframework.core.env.AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME;
    
      @BeforeClass
      public static void setupTest() {
        System.setProperty(DEFAULT_PROFILES_PROPERTY_NAME, "test");
      }
    

    它很棒 .

相关问题