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

Java JUnit参数化测试:如何从IntelliJ/Eclipse只运行1个特定测试?,java,eclipse,junit,intellij-idea,Java,Eclipse,Junit,Intellij Idea,我有一个@Parameterized junit测试,它产生了50个测试: @RunWith(Parameterized.class) public class NurseRosteringSolveAllTurtleTest ... { @Parameterized.Parameters(name = "{index}: {0}") public static Collection<Object[]> getSolutionFilesAsParameters()

我有一个@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失败


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

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

结果:

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


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

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


在JUnit launch configuration In Test method字段中,您可以编写参数化测试的全名,在您的示例中,它应该类似于“solveDataFile[28:/path/to/your/file]”。Eclipse将抱怨该方法不存在,但仍将成功使用它。

对于测试ex 27和28的子集,只需添加:

`.subList( startInclusive, stopExclusive );`
在返回参数集合之前

非连续子集:

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

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

这可以是:

@Parameterized方法返回的单个数据集的所有方法 单一@测试方法的所有数据集 如前所述,还可以通过在启动配置中的方法文本字段中输入测试名称来指定测试。将有一个标记指示该方法不存在,但测试仍将运行


有关详细信息,请参见。

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

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

您可以转到您的csv文件,通过在字符前面加上字符来注释掉一些行。

不知道为什么有人会否决这个答案,因为这是一个非常有趣的线索。问题是eclipse是否破解了它,或者它是否使用了未知的环境变量JUnit4。在后一种情况下,我们应该能够在IntelliJ/Eclipse运行配置中手动模拟它。@GeoffreyDeSmet我认为这对于Eclipse邮件列表来说可能是一个好问题。我提出了一个问题,我看到您的问题得到了回应:没有现成的方法来实现这一点,所以将此作为一个功能请求:-自2021年起,IntelliJ有任何解决方案吗?感谢您提供的精确语法。