JUnit > 5.6.0 中有什么方法可以在类执行条件评估之前加载上下文吗?



我的目标是仅在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 对其进行了测试,它工作正常,没有任何弃用警告。

最新更新