我进行了@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
或类似内容。
答案 0 :(得分:22)
我刚刚在Eclipse中使用一个简单的参数化测试对此进行了测试,该测试始终在测试#4上失败。可以右键单击失败的测试并选择 运行 。然后只执行该测试。
结果:
令人沮丧的是,我无法看到Eclipse为解决问题所做的工作。在运行配置中没有任何明显改变。特别是,如果您选择第二次运行配置,它将执行所有测试。
进一步测试显示Eclipse将重新生成所有10个参数值,但仅使用第4个值。 (这是通过在@Parameters
方法中嵌入print语句来确定的。
答案 1 :(得分:5)
Eclipse现在(从Mars M4版本开始)不仅可以运行参数化测试类中的单个测试,还可以运行任何类型的子树。
这可以是:
如前所述,还可以通过在启动配置中提交的“方法”文本中输入测试名称来指定测试。将有一个标记表明该方法不存在,但测试仍将运行。
有关详细信息,请参阅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文件,并通过在#
字符前加上“注释掉”某些行。