junit 参数化测试用例
几年前,我写了有关JUnit参数化测试的文章 。 我不喜欢它们的一件事是JUnit使用数字命名了单个测试用例,因此,如果它们失败,您将不知道是哪个测试参数导致了失败。 以下Eclipse屏幕快照将向您展示我的意思:
但是,在JUnit 4.11中, @Parameters
批注现在带有一个name
变量,可用于在测试名称中显示参数,从而使它们更具描述性。 您可以在此参数中使用以下占位符,它们将在运行时由JUnit替换为实际值:
-
{index}
:当前参数索引 -
{0}
,{1}
,…:第一个,第二个,依此类推,参数值
这是一个例子:
import static org.junit.Assert.assertEquals;import java.util.Arrays;
import java.util.Collection;import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;@RunWith(Parameterized.class)
public class StringSortTest {@Parameters(name = "{index}: sort[{0}]={1}")public static Collection<Object[]> data() {return Arrays.asList(new Object[][] {{ "abc", "abc"},{ "cba", "abc"},{ "abcddcba", "aabbccdd"},{ "a", "a"},{ "aaa", "aaa"},{ "", ""}});}private final String input;private final String expected;public StringSortTest(final String input, final String expected){this.input = input;this.expected = expected;}@Testpublic void testSort(){assertEquals(expected, sort(input));}private static String sort(final String s) {final char[] charArray = s.toCharArray();Arrays.sort(charArray);return new String(charArray);}
}
运行测试时,您将看到单独的测试用例,如下面的Eclipse屏幕快照所示,因此很容易识别每个测试用例中使用的参数。
请注意,由于Eclipse中的错误 ,包含括号的名称将被截断。 这就是为什么我必须使用sort[{0}]
而不是sort({0})
。
参考: JUnit:在我们的JCG合作伙伴 Fahd Shariff的fahd.blog博客中为参数化测试中的各个测试用例命名 。
翻译自: https://www.javacodegeeks.com/2013/04/junit-naming-individual-test-cases-in-a-parameterized-test.html
junit 参数化测试用例