根据常量值执行JUnit
Execute JUnit based on Constant value
我有这个 class 和定义的常量
public class Constants {
public static final boolean TEST = true;
}
我想检查一下这个常数是否为 TRUE,如下所示:
@Test
@EnabledIf("'true' == Constants.TEST")
public void theMeasurementSampleScreenFromPickConfirm() throws InterruptedException {
// some code execution
}
但是我得到错误java.lang.NoSuchMethodError: 'java.lang.reflect.Method org.junit.platform.commons.util.ReflectionUtils.getRequiredMethod(java.lang.Class, java.lang.String, java.lang.Class[])'
你知道我如何正确地执行这个检查吗?
使用Spring的@EnabledIf时,可以使用SpEL表达式。参见 @EnabledIf With a SpEL Expression
要引用常量,请使用 T operator from SpEL
You can use the special T operator to specify an instance of java.lang.Class (the type). Static methods are invoked by using this operator as well
另请注意,您的 TEST 常量是布尔值,而不是字符串。
结合以上你可以使用:
@EnabledIf("#{T(com.sandbox.Constants).TEST == true}")
甚至
@EnabledIf("#{T(com.sandbox.Constants).TEST}")
不要在比较布尔值时使用单引号。
解决方案 1: 在注释本身中附加值。
@Test
@EnabledIf("#{" + Constants.TEST + "}")
public void theMeasurementSampleScreenFromPickConfirm() throws InterruptedException {
// some code execution
}
解决方案 2: 使用 Spring 表达式语言,您可以使用 Type 运算符,方法是提供class。例如:如果 Constants
class 在 com.example
包中,则
@Test
@EnabledIf("#{T(com.example.Constants).TEST}")
public void theMeasurementSampleScreenFromPickConfirm() throws InterruptedException {
// some code execution
}
注意: 这仅适用于具有 Spring 启动启动器测试的 Spring 项目(内部使用 JUnit 默认情况下)支持,因为如果它是非 spring 项目,则无法评估 SpEL。 JUnit 不支持在没有 Spring 的情况下对 SpEL 进行独立评估。
因此,使用 spring-boot-starter-test
创建一个 spring 引导项目,并使用 spring-boot-starter-test
中的 @EnabledIf
注释,它能够评估 Spring 表达式语言。
我有这个 class 和定义的常量
public class Constants {
public static final boolean TEST = true;
}
我想检查一下这个常数是否为 TRUE,如下所示:
@Test
@EnabledIf("'true' == Constants.TEST")
public void theMeasurementSampleScreenFromPickConfirm() throws InterruptedException {
// some code execution
}
但是我得到错误java.lang.NoSuchMethodError: 'java.lang.reflect.Method org.junit.platform.commons.util.ReflectionUtils.getRequiredMethod(java.lang.Class, java.lang.String, java.lang.Class[])'
你知道我如何正确地执行这个检查吗?
使用Spring的@EnabledIf时,可以使用SpEL表达式。参见 @EnabledIf With a SpEL Expression
要引用常量,请使用 T operator from SpEL
You can use the special T operator to specify an instance of java.lang.Class (the type). Static methods are invoked by using this operator as well
另请注意,您的 TEST 常量是布尔值,而不是字符串。
结合以上你可以使用:
@EnabledIf("#{T(com.sandbox.Constants).TEST == true}")
甚至
@EnabledIf("#{T(com.sandbox.Constants).TEST}")
不要在比较布尔值时使用单引号。
解决方案 1: 在注释本身中附加值。
@Test
@EnabledIf("#{" + Constants.TEST + "}")
public void theMeasurementSampleScreenFromPickConfirm() throws InterruptedException {
// some code execution
}
解决方案 2: 使用 Spring 表达式语言,您可以使用 Type 运算符,方法是提供class。例如:如果 Constants
class 在 com.example
包中,则
@Test
@EnabledIf("#{T(com.example.Constants).TEST}")
public void theMeasurementSampleScreenFromPickConfirm() throws InterruptedException {
// some code execution
}
注意: 这仅适用于具有 Spring 启动启动器测试的 Spring 项目(内部使用 JUnit 默认情况下)支持,因为如果它是非 spring 项目,则无法评估 SpEL。 JUnit 不支持在没有 Spring 的情况下对 SpEL 进行独立评估。
因此,使用 spring-boot-starter-test
创建一个 spring 引导项目,并使用 spring-boot-starter-test
中的 @EnabledIf
注释,它能够评估 Spring 表达式语言。