更改参数化测试的名称

新手上路,请多包涵

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

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

原文由 Epaga 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 576
2 个回答

此功能已纳入 JUnit 4.11

要使用更改参数化测试的名称,您说:

 @Parameters(name="namestring")

namestring 是一个字符串,可以有以下特殊占位符:

  • {index} - 这组参数的索引。默认 namestring{index}
  • {0} - 此测试调用的第一个参数值。
  • {1} 第二个参数值
  • 等等

测试的最终名称将是测试方法的名称,后面是括号中的 namestring ,如下所示。

例如(改编自 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 的方法名称)。

原文由 rescdsk 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 Yishai 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题