@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的主要内容,如果未能解决你的问题,请参考以下文章