4

我有一个项目测试套件,其中包含一组我想用作测试套件的文件 -每个文件一个测试

但是测试的数量将达到数百个,并且每个测试都是相同的:解析文件并检查输出。为每个文件维护一个方法很乏味。

JBoss Operation Network 使用 TestNG,它允许创建一个测试套件,并用同一个类的多个实例填充它,并允许显式设置测试名称

在 jUnit 中,我还没有找到更改测试名称的方法。所以对所有人来说都是一样的。

是否有某种方法或扩展可以使用自定义生成的测试名称多次运行同一个类?

PS:我不想诉诸于课堂仪器。

4

2 回答 2

4

创建时,您可以作为构造函数参数TestSuite传递:desiredTestCaseName

public class AllTestSuite extends TestSuite{

  public static Test suite() {
      TestSuite suite= new TestSuite();
      Test testCase1 = new MyTest("TestCaseOne");
      Test testCase2 = new MyTest("TestCaseTwo");
      suite.addTest(testCase1);
      suite.addTest(testCase2);
      return suite;
  }
}

当您运行该套件时,它将引用构造函数中提供的名称,即TestCaseOne测试TestCaseTwo类为MyTest.

编辑:

请确保您已将MyTest类中的构造函数定义为:

public MyTest(String name) {
    super(name);
}

如果需要额外的参数支持,您可以在测试用例中添加一个构造函数来接受参数并将它们分配给测试用例类变量(最初默认使用默认测试场景值),可以在测试执行期间使用:

public MyTest(String name, String param1, Integer param2...) {
    super(name);
    this.param1 = param1;
    this.param2 = param2;
}

运行测试套件后,JUnit 控制台如下所示: 在此处输入图像描述

于 2012-10-18T03:02:38.863 回答
3

如果您使用的是 JUnit4,则可以查看@Parameterized。基本思想是您提供一个待办事项列表,JUnit 对列表中的每个项目执行相同的测试方法。

使用 4.10 版本,命名不是太好,您可以得到 0、1、2... 作为名称,但是使用 4.11-beta-1(应该很快会从 beta 版本中出来),您可以获得更好的命名方案,因为您可以指定名称。请参阅@Parameterized顶部的 javadoc 。

@RunWith(Parameterized.class)
public class FibonacciTest {
    @Parameters(name= "{index}: fib({0})={1}") // we specify the name here
    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 int fInput;

    private int fExpected;

    public FibonacciTest(int input, int expected) {
        fInput= input;
        fExpected= expected;
    }

    @Test
    public void test() {
        assertEquals(fExpected, Fibonacci.compute(fInput));
    }
}

在上面,您最终会得到诸如

fib(0)=0
fib(1)=1
fib(2)=1

等等

于 2012-10-18T12:20:59.280 回答