java - Junit 想在一定时间后停止该方法

标签 java junit

我有一个 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();
        }
    }

假设运行时间为 1 小时 这里的问题是如果 telnetUtils.run(telnetClient);需要超过 1 小时,此逻辑将不起作用。

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

最佳答案

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

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

关于java - Junit 想在一定时间后停止该方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12909196/

相关文章:

java - 使用 Gitlab CI 和 Junit 测试媒体播放器

java - 单元测试调用Java中私有(private)方法和其他对象的公共(public)方法

java - ServerSocket.accept() 终止 Android 应用程序

java - 基于另一个数组对对象的 ArrayList 进行排序 - Java

java - 如何让 JOOQ 同时生成枚举类型和自定义类型?

java - Android 应用程序 - 可以修改 Constants.java 中的字符串吗?

spring - 集成测试和 Spring 应用程序事件

java - Junit 断言错误

java - 我如何为 android fragment 类编写单元测试?

java - 如何在不更改数据库架构的情况下将 UrlType 从 Hibernate 3.6 迁移到 4.3?