我有一个junit测试类。测试类读取文件并向telnet服务器发送消息。处理可能需要1小时到5小时,具体取决于文件中的消息。我希望此测试类在之后停止在属性文件中配置的一定时间。下面是我的代码。
public void sendMessage() throws InterruptedException {
final long timetorun = Long.valueOf(props.getMap().get("timetorun"))
.longValue();
try {
System.out.println("duration : " + duration);
while (duration < timetorun) {
endTime = System.currentTimeMillis();
duration = endTime - startTime;
logger.info("Sending Message");
telnetUtils.run(telnetClient);
// sendMessage();
}
} catch (Exception e) {
e.printStackTrace();
}
}
假设timetorun是1小时 这里的问题是如果telnetUtils.run(telnetClient);需要1个多小时才能使用这个逻辑。
任何人都可以提供一些帮助,如何实现这一点。
答案 0 :(得分:3)
您可以在测试用例上设置超时。例如:
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class TestTimeout {
private long startAt;
@Before
public void before() {
this.startAt = System.currentTimeMillis();
}
@After
public void after() {
System.out.println(String.format("Total time: %1$d ms", System.currentTimeMillis() - startAt));
}
@Test(timeout=1000)
public void timeout() throws InterruptedException {
Thread.sleep(2000);
}
}
由于超时,测试失败。它将其写入标准输出:
Total time: 1001 ms