3

我有一个 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 是 1hr 这里的问题是如果 telnetUtils.run(telnetClient); 需要超过 1 小时这个逻辑不起作用。

任何人都可以就如何实现这一目标提供一些帮助。

4

1 回答 1

4

您可以在测试用例上设置超时。例如:

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
于 2012-10-16T09:32:10.503 回答