34

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

@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 个测试?在不更改实际代码的情况下,只需-D在 IntelliJ(或 Eclipse)的运行配置中配置一个或类似的东西。

4

5 回答 5

22

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

测试输出

结果:

只测试4

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

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

于 2013-05-13T08:30:18.830 回答
5

Eclipse 现在(从 Mars M4 版本开始)不仅能够运行 Parameterized 测试类中的单个测试,还能够运行任何类型的子树。

这可以是:

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

如前所述,也可以通过在启动配置中的“方法”文本字段中输入测试名称来指定测试。会有一个标记指示该方法不存在,但无论如何测试都会运行。

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

于 2014-11-18T16:15:12.603 回答
3

不确定它是否会有所帮助,但您可以尝试我在 Eclipse 和 JUnit 参数化测试中使用的技巧。

在“测试方法”字段中的 JUnit 启动配置中,您可以编写参数化测试的全名,在您的示例中,它应该类似于“solveDataFile[28: /path/to/your/file]”。Eclipse 会抱怨该方法不存在,但仍会成功午餐。

于 2013-05-17T12:34:17.340 回答
2

对于测试子集 ex( 27 & 28 ) 只需添加:

`.subList( startInclusive, stopExclusive );`

在返回您的参数集合之前。

非连续子集:

Collection<Object[]> c = Arrays.asList( data ).subList( startInclusive, stopExclusive );
c.add( another subset );
return c;
于 2013-07-19T20:09:05.803 回答
1

与 Miguel 的回答类似,如果您使用的是 JUnit 5

@ParameterizedTest
@CsvFileSource(resources = arrayOf("/sender.csv"))

您可以转到您的 csv 文件并通过将字符添加到某些行来“注释掉”#它们。

于 2017-12-13T10:27:31.853 回答