gpt4 book ai didi

java - 参数化测试: selectively run for only one data point

转载 作者:行者123 更新时间:2023-11-30 03:38:10 24 4
gpt4 key购买 nike

我有一个参数化测试,例如使用文件提供的测试:

@RunWith(Parameterized.class)
public class FileTest {
...
public static Collection<Object[]> data() {
return IteratorUtils.toList( FileUtils.iterateFiles(testFilesDir
, TrueFileFilter.INSTANCE
, (IOFileFilter) null) );
}

无论是文件系统上的文件、表中的行还是 URL,实际上都没有区别。只是一个参数化测试,需要输入大量数据点并需要很长时间才能得出结论。

现在我正在运行测试,假设有 10,000 个文件,我检测到文件 #9,203 存在问题。我修复了这个错误并验证修复 我想重新运行测试,但仅限于这个特定文件(因为我不能等 2 小时)。随后的重新运行(在验证修复后)当然应该包含整个数据集。

有什么办法可以做到这一点,例如通过在 JUnit 的控制台调用中提供一些运行时参数以便仅使用一个特定的数据点?

最佳答案

好吧,最后我找到了一种方法来完成这个任务。为参数化测试类使用构造函数,该构造函数还采用可以轻松从命令行传递的友好名称。例如。像这样:

private final File   testFile;
private final String friendlyTestName;

public FileTest(File testFile, String friendlyTestName) {
this.testFile = testFile;
this.friendlyTestName = friendlyTestName;
}

当然,您必须在提供数据点的方法中生成适当的元组。例如。在下面的示例中,友好名称只是测试文件的文件名(不带路径;我们假设它们是唯一的):

@Parameters(name= "{index}: {1}")
public static Collection<Object[]> data() {
Collection<File> _rv = IteratorUtils.toList( FileUtils.iterateFiles(testFilesDir, TrueFileFilter.INSTANCE, (IOFileFilter) null) );
Collection<Object[]> rv = new ArrayList<>();
for (File f : _rv)
rv.add(new Object[]{f, f.getName()});
return rv;
}

然后,当从命令行调用 Ant 时,传递一个 target-friend-name 参数:

ant -Dtarget-friendly-name=a-005 test

...并确保它一直传送到 junit Ant 任务。例如。在您的 build.xml 文件中,您应该有类似以下内容:

<junit printsummary="${junit.summary}" showoutput="${junit.output}">
<sysproperty key="target-friendly-name" value="${target-friendly-name}"/>
...
</junit>

最后,在测试方法本身中使用 assumeTrue 要求数据点的友好名称等于目标友好名称(如果存在;否则运行所有测试)。

@Test
public void testFile() {
assumeTrue( (targetFriendlyName==null)||(targetFriendlyName.equals(friendlyTestName)) );
...
}

我正在寻找一种直接使用 Parameters{index} 属性的方法。注释,这将消除定义单独的 FriendlyName 的需要,但还没有找到一种方法来做到这一点;因此,此解决方案需要在测试类中不自然地添加友好名称字段。

关于java - 参数化测试: selectively run for only one data point,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27332524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com