@IfProfileValue 不适用于 JUnit 5 SpringExtension

Posted

技术标签:

【中文标题】@IfProfileValue 不适用于 JUnit 5 SpringExtension【英文标题】:@IfProfileValue not working with JUnit 5 SpringExtension 【发布时间】:2019-05-12 02:02:50 【问题描述】:

我将 junit5 与 spring-starter-test 一起使用,为了运行 spring 测试,我需要使用 @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 测试组。但测试只是运行并忽略@IfProfileValue

【问题讨论】:

【参考方案1】:

我发现@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() 

【讨论】:

没错。但是,如果您使用 JUnit Jupiter 5.1 或更高版本并且想要检查 JVM 系统属性,最好的选择是内置支持 @EnabledIfSystemProperty@DisabledIfSystemProperty

以上是关于@IfProfileValue 不适用于 JUnit 5 SpringExtension的主要内容,如果未能解决你的问题,请参考以下文章

为啥 UITableViewAutomaticDimension 不适用于 sectionFooterHeight?

为啥排序不适用于矢量?

验证不适用于 saveMany

UipanGesture 不适用于 Uiswitch

jQuery 不适用于 Express

为啥 MultiBinding 不适用于 CornerRadius