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

时间:2013-05-13 08:00:30

标签: java eclipse junit intellij-idea

我进行了@Parameterized junit测试,产生了50个测试:

@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失败。

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

5 个答案:

答案 0 :(得分:22)

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

test output

结果:

just test 4

令人沮丧的是,我无法看到Eclipse为解决问题所做的工作。在运行配置中没有任何明显改变。特别是,如果您选择第二次运行配置,它将执行所有测试。

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

答案 1 :(得分:5)

Eclipse现在(从Mars M4版本开始)不仅可以运行参数化测试类中的单个测试,还可以运行任何类型的子树。

这可以是:

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

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

有关详细信息,请参阅this blog post

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

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

`.subList( startInclusive, stopExclusive );`

返回参数集合之前。

非连续子集:

Collection<Object[]> c = Arrays.asList( data ).subList( startInclusive, stopExclusive );
c.add( another subset );
return c;

答案 4 :(得分:1)

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

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

你可以转到你的csv文件,并通过在#字符前加上“注释掉”某些行。