gpt4 book ai didi

java - 运行多个 JUnit 测试 - 如果失败发生一次则不要重复

转载 作者:行者123 更新时间:2023-11-28 20:56:15 25 4
gpt4 key购买 nike

我现在在一个项目中使用 JUnit 作为测试工程数据的框架(引用:最后一个问题 Creating a Java reporting project -- would like to use JUnit and Ant but not sure how)

由于一张图片(错误的是代码块)说明了 1,000 个单词,所以让我粘贴我的循环:

JUnitCore junit = new JUnitCore();
RunListener listener = new RunListener();
junit.addListener(listener);

[...]

for (AbstractFault fault : faultLog) {
theFault = fault;
Result result = junit.run(GearAndBrakeFaultLogReports.class);

for (Failure f : result.getFailures()) {
output.println(log.getName());
output.println(fault.getName());
output.println(HelperFunctions.splitCamelCase(f.getDescription()
.getMethodName()));
output.println(f.getMessage());
output.println();
}
}

如您所见,我多次运行“junit.run”(针对日志中的每个故障)。

但是,如果我的任何一个测试触发了 fail(),我不想重复该测试。换句话说,如果日志中有 50 个错误,并且在错误 #1 中测试失败,我不想在我正在循环的 49 个 future 错误中尝试该测试。

这是一个示例测试:

private static boolean LeftMLGDownTooLongFound = false;
@Test
public final void testLeftMLGDownTooLong() {
if (!LeftMLGDownTooLongFound
&& handleLDGReportFaults(false)
&& theFault.getName().equals(FaultNames.LDG_LG_DWN_TIME.toString())) {

assertNotGreater(getPCandRecNum(), 8f, ldgFault.getLeftStrutUpTime());
LeftMLGDownTooLongFound = true;
}
}

目前,为此,我正在制作一个静态 boolean 值,它最初设置为 false,但在第一次断言后切换为 true。不确定这是否有效,但这是想法。我不想对每个测试(其中 100 个)执行此操作。

在 JUnitCore 或 Runner 类中是否有任何公共(public)函数、方法或方式我可以对其进行标记,以便在调用 fail() 后测试不会运行超过一次?

最佳答案

啊,想通了。为此,我需要实现一种方法来查找失败的测试,然后在 @Before 区域中将测试退出。这是我添加的内容。

@Rule public TestName name = new TestName();
@Before
public void testNonFailedOnly() {
Assume.assumeTrue(!failedTests.contains(name.getMethodName()));
}
private static List<String> failedTests = new ArrayList<String>(256);

@Rule
public TestWatcher watchman = new TestWatcher() {
/* (non-Javadoc)
* @see org.junit.rules.TestWatcher#failed(java.lang.Throwable, org.junit.runner.Description)
*/
@Override
protected void failed(Throwable e, Description description) {
super.failed(e, description);
failedTests.add(description.getMethodName());
}
};

它确实增加了大约 1.5 秒的开销,这很糟糕……但比替代方案更好!!

有人知道如何优化这个吗?我相信开销来自 TestWatcher,不要认为它来自 arraylist。

关于java - 运行多个 JUnit 测试 - 如果失败发生一次则不要重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16846846/

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