在JUnit4中使用参数化测试时,是否有一种方法可以设置我自己的自定义测试用例名称?
我想改变默认的-[测试类]. runtest [n] -有意义的东西。
在JUnit4中使用参数化测试时,是否有一种方法可以设置我自己的自定义测试用例名称?
我想改变默认的-[测试类]. runtest [n] -有意义的东西。
当前回答
这个特性已经加入到JUnit 4.11中。
若要使用更改参数化测试的名称,请执行以下命令:
@Parameters(name="namestring")
Namestring是一个字符串,可以有以下特殊占位符:
{index} -这组参数的索引。默认名称字符串是{index}。 {0} -测试调用的第一个参数值。 {1} -第二个参数值 等等
测试的最终名称将是测试方法的名称,后面跟着括号中的名称字符串,如下所示。
例如(改编自Parameterized注释的单元测试):
@RunWith(Parameterized.class)
static public class FibonacciTest {
@Parameters( name = "{index}: fib({0})={1}" )
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][] { { 0, 0 }, { 1, 1 }, { 2, 1 },
{ 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } });
}
private final int fInput;
private final int fExpected;
public FibonacciTest(int input, int expected) {
fInput= input;
fExpected= expected;
}
@Test
public void testFib() {
assertEquals(fExpected, fib(fInput));
}
private int fib(int x) {
// TODO: actually calculate Fibonacci numbers
return 0;
}
}
将给出像testFib[1: fib(1)=1]和testFib[4: fib(4)=3]这样的名称。(名称的testFib部分是@Test的方法名)。
其他回答
当您想要测试名称中的参数值时,您可以执行类似于-的操作
@ParameterizedTest(name="{index} {arguments} then return false" )
@ValueSource(strings = {"false","FALSE"," ","123","abc"})
@DisplayName("When Feature JVM argument is ")
void test_Feature_JVM_Argument_Is_Empty_Or_Blank_Strings_Or_False(String params) {
System.setProperty("FeatureName", params);
assertFalse(Boolean.parseBoolean(System.getProperty("FeatureName")));
}
测试名称看起来像-
JUnit测试图像
参数化测试在内部调用toString()。 如果您创建覆盖toString()的对象包装器,它将改变测试的名称。
这里有一个例子,我在其他帖子中回答过。 https://stackoverflow.com/a/67023556/1839360
看看JUnit 4.5,它的运行器显然不支持这一点,因为该逻辑隐藏在Parameterized类中的私有类中。您不能使用JUnit Parameterized运行器,而是创建自己的能够理解名称概念的运行器(这导致了如何设置名称的问题……)
从JUnit的角度来看,如果他们传递逗号分隔的参数,而不是(或除了)仅仅传递一个增量,那就更好了。TestNG就是这样做的。如果这个特性对你很重要,你可以在www.junit.org的雅虎邮件列表上发表评论。
由于所访问的参数(例如“{0}”总是返回toString()表示,一个解决方法是在每种情况下进行匿名实现并覆盖toString()。例如:
public static Iterable<? extends Object> data() {
return Arrays.asList(
new MyObject(myParams...) {public String toString(){return "my custom test name";}},
new MyObject(myParams...) {public String toString(){return "my other custom test name";}},
//etc...
);
}
你可以创建一个方法
@Test
public void name() {
Assert.assertEquals("", inboundFileName);
}
虽然我不会一直用它,但弄清楚143到底是哪个测试数字还是很有用的。