0

我创建了一个参数化的 JUnit 测试用例。在这个测试用例中,我在 Object[][] 中定义了测试用例,每一行代表一个测试用例,所有测试用例将一次运行,现在我想要的是一种只运行一个测试用例的方法。假设我想运行第三个测试用例,所以我想告诉 junit 只考虑对象 [] [] 的第二行?有没有办法做到这一点?

感谢您的回复。谢谢

4

2 回答 2

1

不知道你的意思,但有几个选项:

  1. 使用 Theories 而不是 Parameterized 这样您就可以将一些测试标记为@Test,而将其他测试标记为@Theory
  2. 在测试中使用assume以检查参数化值是否适用于测试
  3. 使用Enclosed测试运行器并隔离一个内部类中的一些测试Parameterized和另一个内部类中的其他测试。

理论博客

认为

封闭式

于 2012-11-07T11:28:02.153 回答
1

您可以注释掉您不想运行的测试,例如:

    @Parameters
    public static Collection stringVals() {
        return Arrays.asList(new Object[][] {
            //{"SSS"},
            //{""},
            //{"abcd"},
            {"Hello world"}  //only run this
        });
    }

编辑:如果你想根据测试用例运行不同的测试,你也可以Assume在 JUnit 4+ 中忽略一些带有类的测试输入。检查这个问题

例子:

假设您有两个 class 实例Person,并且您想测试它们是否穿着。如果是sex.equals("male"),你想检查他的clothes列表是否包含trousers,但是对于sex.equals("female"),你想检查她是否已经skirt包含在她的列表中clothes

因此,您可以像这样构建测试:

@Parameter(0)
public Person instance;


@Parameters
public static Collection clothes() {
    Person alice = new Person();
    alice.setSex("female");
    alice.addClothes("skirt");
    Person bob = new Person();
    bob.setSex("male");
    bob.addClothes("trousers");
    return Arrays.asList(new Object[][] {
        {alice, "skirt"},
        {bob, "trousers"},
    });
}

@Test
public void testMaleDressed() {
    //Assume: ignore some test input. 
    //Note: Message is error output; when condition is satisfied, the following lines will run, if not: test ignored
    Assume.assumeTrue("Tested person: " + person + "is female, ignore!", instance.getSex().equals("male"));
    assertTrue(person.getClothes().contains("trousers"));
}

@Test
public void testFemaleDressed() {
    //Assume: ignore some test input. 
    //Note: Message is error output; when condition is satisfied, the following lines will run, if not: test ignored
    Assume.assumeTrue("Tested person: " + person + "is male, ignore!", instance.getSex().equals("female"));
    assertTrue(person.getClothes().contains("skirt"));
}

当你运行所有测试时,你会看到

[0]
    - testMaleDressed(ignored)
    - testFemaleDressed(passed)

[1]
    - testMaleDressed(passed)
    - testFemaleDressed(ignored)

没有错误。

于 2018-05-21T09:32:20.300 回答