问题描述
我使用的是 JUnit 5.7.0、IntellijIDEA 2021.1.2 CE、MacOS Catalina 10.15。并且不明白两者之间的区别
ParameterizedTest.ARGUMENTS_PLACEHOLDER
和 ParameterizedTest.ARGUMENTS_WITH_NAMES_PLACEHOLDER
。
根据 javadoc ARGUMENTS_WITH_NAMES_PLACEHOLDER
处理命名参数,而 ARGUMENTS_PLACEHOLDER
只处理参数。
两个测试在 IDEA 中的测试结果看起来是一样的:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
@ParameterizedTest(name = ARGUMENTS_WITH_NAMES_PLACEHOLDER)
@CsvSource({"apple,1","banana,2","'lemon,lime',3" })
void testWithArguments(String fruit,int rank) {
}
@ParameterizedTest(name = ARGUMENTS_PLACEHOLDER)
@CsvSource({"apple,3" })
void testWithNamedArguments(String fruit,int rank) {
}
谁能举例说明这两个占位符的行为不同?
解决方法
如果您使用 @ParameterizedTest(name = ARGUMENTS_WITH_NAMES_PLACEHOLDER)
,您将获得 parameterName
+ "=" + paraveterValue
的输出结果。
但是如果你使用 @ParameterizedTest(name = ARGUMENTS_PLACEHOLDER)
你只会得到 paraveterValue
此外,您可以在 javadoc 中看到:
Placeholder for the complete,comma-separated named arguments list of the current invocation of a @ParameterizedTest method: {argumentsWithNames}
@API(status = EXPERIMENTAL,since = "5.6")
String ARGUMENTS_WITH_NAMES_PLACEHOLDER = "{argumentsWithNames}";
Default display name pattern for the current invocation of a @ParameterizedTest method: "[{index}] {argumentsWithNames}"
Note that the default pattern does not include the display name of the @ParameterizedTest method.
@API(status = EXPERIMENTAL,since = "5.3")
String DEFAULT_DISPLAY_NAME = "[" + INDEX_PLACEHOLDER + "] " + ARGUMENTS_WITH_NAMES_PLACEHOLDER;
我试着像这样运行你的代码:
@ParameterizedTest(name = ARGUMENTS_WITH_NAMES_PLACEHOLDER)
@CsvSource({"apple,1","banana,2","'lemon,lime',3" })
void testWithNamedArguments(String fruit,int rank) {
}
我得到了正确的结果:
我使用 jupiter 5.6.3,功能 ARGUMENTS_WITH_NAMES_PLACEHOLDER 从 5.6 版本开始出现。