更改参数化测试的名称

2022-08-31 05:57:32

在 JUnit4 中使用参数化测试时,有没有办法设置我自己的自定义测试用例名称?

我想将默认值 - 更改为有意义的内容。[Test class].runTest[n]


答案 1

此功能已进入 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


答案 2

看看JUnit 4.5,它的运行器显然不支持这一点,因为该逻辑隐藏在参数化类内的私有类中。您不能使用JUnit参数化运行器,而是创建自己的运行器来理解名称的概念(这会导致如何设置名称的问题......

从 JUnit 的角度来看,如果它们不是(或除了)传递增量,而是传递逗号分隔的参数,那就太好了。TestNG就是这样做的。如果该功能对您很重要,您可以在 www.junit.org 引用的yahoo邮件列表上发表评论。


推荐