JUnit参数化测试:如何从IntelliJ/Eclipse只运行1个特定的测试?

2022-09-01 07:48:37

我有一个生成50个测试的junit测试:@Parameterized

@RunWith(Parameterized.class)
public class NurseRosteringSolveAllTurtleTest ... {

    @Parameterized.Parameters(name = "{index}: {0}")
    public static Collection<Object[]> getSolutionFilesAsParameters() {
        return ... // returns 50 Files.
    }

    public NurseRosteringSolveAllTurtleTest(File unsolvedDataFile) {
        ...
    }

    ...

    @Test
    public void solveDataFile() {
        ...
    }

}

运行它需要一个小时(而且不可能缩短这个时间,它们是集成测试)。测试 28 失败。

如何单独运行测试 28,而不运行其他 49 个测试?在不更改实际代码的情况下,只需在IntelliJ(或Eclipse)的运行配置中配置或类似的东西即可。-D


答案 1

我刚刚在Eclipse中用一个简单的参数化测试对此进行了测试,该测试在测试#4上总是失败。可以右键单击失败的测试,然后选择“运行”。然后只执行该测试。

test output

结果:

just test 4

令人沮丧的是,我看不出Eclipse做了什么来解决这个问题。运行配置中没有任何明显更改。特别是,如果选择再次运行配置,它将执行所有测试。

一些进一步的测试表明,Eclipse 将重新生成所有 10 个参数值,但仅使用第 4 个值。(这是通过在方法中嵌入 print 语句来确定的)。@Parameters


答案 2

Eclipse现在(截至Mars M4版本)不仅能够运行参数化测试类的单个测试,而且能够运行任何类型的子树。

这可以是:

  • @Parameterized方法返回的单个数据集的所有方法
  • 单个@Test方法的所有数据集

如前所述,还可以通过在启动配置中提交的“方法”文本中输入测试名称来指定测试。将有一个标记指示该方法不存在,但测试仍将运行。

有关详细信息,请参阅此博客文章


推荐