gpt4 book ai didi

java - 如何覆盖失败的 JUnit 测试用例的行为

转载 作者:行者123 更新时间:2023-11-29 08:56:26 24 4
gpt4 key购买 nike

我需要为永无止境的 main() 方法编写一个 JUnit 测试用例。这个 main() 方法在处理完一些文件后会 hibernate 一分钟,然后恢复执行。这个过程一直持续下去。

我使用下面的代码为它编写了 JUnit:

@Test (timeout = 10000)
public void testMainMethod()
{
ClassName.main(null);
assertEquals(true, true);
}

毫不奇怪,我的测试用例失败并显示java.lang.Exception: test timed out after 10000 milliseconds 消息。即使 main() 方法按预期工作,此测试用例也会因超时异常而失败。我如何覆盖这个失败的测试用例的行为,以便在超时异常的情况下它应该将这个测试用例的结果显示为“成功”。

编辑实际需求是:我需要从特定位置搜索文件,如果找到,则将它们移动到不同的文件夹。此搜索应每 30 分钟进行一次。为此,我使用了以下代码:

public class FaxProcessor {
public static void main(String[] args) {
LOGGER.info("*** Starting Fax Server Processor ***");
int poll_time = 1800000;
LOGGER.info("Poll Time set to " + poll_time + " millisec");

FaxProcessor faxProcessor = new FaxProcessor();

while (true) {
try {
if(LOGGER.debugEnabled()){
LOGGER.debug("Starting new pass of fax processor");
}
faxProcessor.startProcessing();
} catch (Exception e) {
LOGGER.error("Processing Error", e);
} finally {
try {
// Wait for next loop
Thread.sleep(poll_time);
} catch (InterruptedException e) {
LOGGER.error("Thread Exception", e);
}
}
}
}
// startProcessing and other private methods here
}

最大的问题是,我只有一个公共(public)方法{main() 方法},所有其他方法都是私有(private)的,所以我无法为它们编写 JUnit 测试用例。此外,main() 方法不返回任何内容,它仅将文件从一个文件夹移动到另一个文件夹,如果一次移动文件失败,它会尝试在下一次移动文件时执行相同操作。所以使用 JUnit 测试用例,我只想检查整个过程中是否出现意外异常。

如果我不在 JUnit 中指定超时,那么测试用例将永远不会完成。一旦超时发生,我想检查测试用例是否由于超时异常而完成,或者是否有其他异常来自导致 JUnit 测试用例的 main() 方法。

如果是超时异常,这意味着我程序中的所有内容都在正确的方向进行,直到发生超时,因此测试用例应该成功。在所有其他情况下,它应将 FAILED 显示为 JUnit 状态。

最佳答案

您人为地限制了您的测试环境,使用以下声明:“我只有一​​个公共(public)方法 {main() 方法},所有其他方法都是私有(private)的”——谁说的?如果这是你老师的要求,那么你应该认真考虑下课。

1) 适当的测试意味着测试 a) 候选文件被识别,b) 候选文件被移动,以及 c) 操作定期发生。

2) 将您的主程序分解为无限循环控制部分和工作程序部分。更好的是,让等待间隔成为一个计算值。

3) 使用protected 方法代替私有(private)方法。由于它们受到保护,您现在可以根据需要使用子类来访问方法,而不会违反必要的封装。

关于java - 如何覆盖失败的 JUnit 测试用例的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20108945/

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