[英]How to override the behavior of a failed JUnit test case
我需要为永无止境的main()方法编写一个JUnit测试用例。 处理某些文件后,此main()方法休眠一分钟,然后恢复执行。 这个过程不断进行。
我使用以下代码为其编写了JUnit:
@Test (timeout = 10000)
public void testMainMethod()
{
ClassName.main(null);
assertEquals(true, true);
}
毫不奇怪,我的测试用例因java.lang.Exception失败:测试在10000毫秒消息后超时 。 即使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
}
最大的问题是,我只有一个公共方法{main()方法},而所有其他方法都是私有的,因此我无法为其编写JUnit测试用例。 另外,main()方法不返回任何内容,它仅将文件从一个文件夹移动到另一个文件夹,并且如果它在一次通过中无法移动文件,则它会尝试在下一次通过中执行相同的操作。 因此,使用JUnit测试用例,我只想检查整个过程中是否出现意外异常。
如果我不会在JUnit中指定超时,则测试用例将永远无法完成。 一旦发生超时,我想检查是否由于Timeout异常而导致测试用例是否完成,还是从其他对JUnit测试用例造成伤害的main()方法内部产生了异常。
万一发生超时异常,这意味着程序中的所有内容都朝着正确的方向运行,直到发生超时为止,因此测试用例应该成功。 在所有其他情况下,它应将FAILED显示为JUnit状态。
您用以下语句人为地限制了测试环境:“我只有一个公共方法{main()方法},而其他所有方法都是私有的” –谁说? 如果这是您老师的要求,那么您应该认真考虑退出课堂。
1)正确的测试意味着测试a)候选文件已被识别,b)候选文件已被移动以及c)该操作定期发生。
2)将您的主程序分解为无限控制部分和工作部分。 更好的是,将等待间隔设为计算值。
3)使用protected
方法而不是私有方法。 由于它们是受保护的,因此您现在可以使用子类来访问所需的方法,而无需违反必要的封装。
我不明白你想做什么。 如果您收到超时异常,则表示测试用例运行时间过长。
如果要测试主方法,并且它包含一个无限循环,那么如何确定该方法可以按预期工作?
对于您的问题,使用
@Test (timeout = 10000, expected=Exception.class)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.