我的目标是仅在application-foo.properties
中声明的某些 spring 属性等于某个常量时才在测试类中执行测试。 我试图通过使用它编写带有注释的自己的 ExecutionCondition 来实现这一目标,当我@Test
方法上使用它时,它可以正常工作。但是在测试类中使用一个会导致问题:条件在 Spring 的上下文结束之前进行评估。
根据文档:
如果执行条件禁用了测试方法,这不会阻止 从实例化开始的测试类。
但是,如果我想,我该怎么办?
基于脚本的条件 API 及其支持实现包括 已弃用,目的是在 JUnit Jupiter 5.6 中删除它们。用户 相反,应该依赖于其他内置条件的组合或 创建并使用 ExecutionCondition 的自定义实现来 评估相同的条件。
从 v5.6.0 开始,@EnabledIf注释被排除在外。这个的优点之一是loadContext()
属性,从字面上看,它可以达到本主题的目标。 剩下的注释(例如 EnabledIfEnvironmentVariable(都没有包含哪怕是一点点提示,如何到达它。而且我在用户指南中也没有发现任何可能性。
我将不胜感激任何帮助或建议。
事实上,import org.junit.jupiter.api.condition.EnabledIf
的@EnabledIf
在 JUnit 5.6 中删除了。
Spring Testimport org.springframework.test.context.junit.jupiter.EnabledIf
中还有@EnabledIf
,它未弃用,适合您的用例。
@EnabledIf(
expression = "#{systemProperties['your.property'].toLowerCase().contains('disabled')}",
reason = "Disabled due to property",
loadContext = true
)
@SpringBootTest
public class MyTest {
// your tests
}
假设您在application-foo.properties
内有一个属性:
flaky.tests.enabled = false
现在,您可以使用
@EnabledIf(
expression = "${flaky.tests.enabled}",
reason = "Disabled flaky tests",
loadContext = true
)
@SpringBootTest
@ActiveProfiles("foo")
public class FlakyTest {
// your tests
}
我用 Spring Boot 2.3.0 对其进行了测试,它工作正常,没有任何弃用警告。