用于集成测试的弹簧启动默认配置文件

2022-08-31 08:25:02

Spring-boot利用Spring配置文件,例如,允许为不同的环境提供单独的配置。我使用此功能的一种方法是配置测试数据库以供集成测试使用。但是,我想知道是否有必要创建自己的配置文件“测试”并在每个测试文件中显式激活此配置文件?现在我通过以下方式进行:

  1. 在 src/main/resources 内创建 application-test.properties

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

  3. 在每个测试文件中包括:

    @ActiveProfiles("test")
    

有没有更智能/更简洁的方式?例如,默认测试配置文件?

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


答案 1

据我所知,没有任何东西可以直接解决您的请求 - 但我可以提出一个可能有帮助的建议:

您可以使用自己的测试注释,该注释是包含 和 的元注释。因此,您仍然需要专用配置文件,但要避免将配置文件定义分散到所有测试中。@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"};
}

答案 2

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

@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


推荐