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

Geo*_*met 32 java eclipse junit intellij-idea

我有一个@Parameterizedjunit测试,产生了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() {
        ...
    }

}
Run Code Online (Sandbox Code Playgroud)

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

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

Dun*_*nes 22

我刚刚在Eclipse中使用一个简单的参数化测试来测试它,它总是在测试#4上失败.可以右键单击失败的测试并选择"运行".然后只执行该测试.

测试输出

结果:

只测试4

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

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

  • 不知道为什么有人会拒绝这个答案,因为这是一个非常有趣的领导.问题是eclipse是否破解它或者它是否使用JUnit 4的未知环境变量.在后一种情况下,我们应该能够在IntelliJ/Eclipse运行配置中手动模仿它. (2认同)

小智 5

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

这可以是:

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

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

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