在JUnit4中使用参数化测试时,是否有一种方法可以设置我自己的自定义测试用例名称?

我想改变默认的-[测试类]. runtest [n] -有意义的东西。


当前回答

在junit4.8.2中,您可以通过简单地复制Parameterized class来创建自己的MyParameterized类。更改TestClassRunnerForParameters中的getName()和testName()方法。

其他回答

在junit4.8.2中,您可以通过简单地复制Parameterized class来创建自己的MyParameterized类。更改TestClassRunnerForParameters中的getName()和testName()方法。

这个特性已经加入到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的方法名)。

查看dsaff提到的JUnitParams,它使用ant在html报告中构建参数化测试方法描述。

这是在尝试LabelledParameterized并发现它虽然可以与eclipse一起工作,但就html报告而言,它不能与ant一起工作。

欢呼,

您可能还想尝试JUnitParams: https://github.com/Pragmatists/JUnitParams

参数化测试在内部调用toString()。 如果您创建覆盖toString()的对象包装器,它将改变测试的名称。

这里有一个例子,我在其他帖子中回答过。 https://stackoverflow.com/a/67023556/1839360