2013-05-13 42 views
30

我有产卵50次测试中@Parameterized JUnit测试:JUnit参数化测试:如何从IntelliJ/Eclipse只运行1个特定的测试?

@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或类似内容即可。

+0

我提出[在junit的问题跟踪器的问题](https://github.com/junit-team/junit/issues/677) – 2013-05-17 12:26:57

+2

我看到你的问题有一个回应:“*没有烘烤在方式来做到这一点,所以把这个作为一个功能请求。*“:-( – 2013-05-22 06:44:18

回答

5

Eclipse是现在(如火星M4释放)能够运行从参数测试类不只是一个单一的测试,但任何一种树的。

这可以是:

  • 单个数据集的所有方法由@参数,方法单一@试验方法

而作为已经回到

  • 所有数据集前面提到过,测试也可以通过将测试名称输入启动配置中的“方法”文本中来指定。将会有一个标记指示该方法不存在,但测试仍将运行。详情请参阅this blog post

  • 22

    我刚刚在Eclipse中用一个简单的参数化测试,在测试#4上总是失败。一个是能够右键单击失败的测试并选择运行。只有那个测试才会执行。

    test output

    结果:

    just test 4

    无奈的是,我不能看看Eclipse做来解决这个问题。运行配置中没有明显改变。特别是,如果您选择第二次运行配置,它将执行所有测试。

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

    +2

    不知道为什么有人会低估这个答案,因为这是一个非常有趣的领导。问题是,是否日食黑客或它是否使用未知的环境在后一种情况下,我们应该可以在IntelliJ/Eclipse运行配置中手动模拟它。 – 2013-05-14 07:00:54

    +0

    @GeoffreyDeSmet我认为这可能是Eclipse邮件列表的一个好问题。 – 2013-05-14 08:13:29

    +0

    [这是eclipse如何实现它](http://blog.moritz.eysholdt.de/2014/11/new-eclipse-junit-feature-run-subtrees.html) – 2014-11-18 16:10:19

    3

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

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

    +0

    感谢您的精确语法。 – rolve 2016-08-08 14:46:04

    2

    对于测试前(27 & 28)的一个子集只需添加:

    `.subList(startInclusive, stopExclusive);` 
    

    返回你的参数集合之前。

    连续非亚:

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

    同样米格尔的答案,如果你使用JUnit 5的

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

    ,你可以去你的csv文件,并通过在前面加上#字符他们“注释掉”一些行。

    相关问题