@IfProfileValue不适用于JUnit 5 SpringExtension

时间:2018-12-11 05:44:23

标签: spring-boot junit spring-test junit5 spring-profiles

我将junit5与spring-starter-test结合使用,为了运行弹簧测试,我需要使用@ExtendWith而不是@RunWith。但是@IfProfileValue可与@RunWith(SpringRunner.class)一起使用,但不能与@ExtendWith(SpringExtension.class)一起使用,以下是我的代码:

@SpringBootTest
@ExtendWith({SpringExtension.class})
class MyApplicationTests{

    @Test
    @DisplayName("Application Context should be loaded")
    @IfProfileValue(name = "test-groups" , value="unit-test")
    void contextLoads() {
    }
}

因此应该忽略contextLoads,因为它没有指定env test-grooups。但测试只是运行而忽略了@IfProfileValue

1 个答案:

答案 0 :(得分:6)

我发现@IfProfileValue仅支持junit4,在junit5中,我们将使用@EnabledIf@DisabledIf

引用https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#integration-testing-annotations-meta

更新:感谢@SamBrannen的评论,因此我在正则表达式匹配项中使用了junit5内置支持,并将其作为注释。

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@EnabledIfSystemProperty(named = "test-groups", matches = "(.*)unit-test(.*)")
public @interface EnableOnIntegrationTest {}

因此具有此注释的任何测试方法或类仅在它们具有包含单元测试的测试组的系统属性时才运行。

@Test
@DisplayName("Application Context should be loaded")
@EnableOnIntegrationTest
void contextLoads() {
}