gpt4 book ai didi

java - 使用 JUnit 时让 TimerTask 运行

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:17:26 25 4
gpt4 key购买 nike

我有一个看起来像这样的函数:

private Timer timer = new Timer();

private void doSomething() {
timer.schedule(new TimerTask() {
public void run() {
doSomethingElse();
}
},
(1000));
}

我正在尝试为我的代码编写 JUnit 测试,但在特别测试这段代码时,它们的行为不如预期。通过使用 EclEmma,我能够看到我的测试从未触及 doSomethingElse() 函数。

我如何在 JUnit 中编写测试,等待足够长的时间让 TimerTask 完成,然后再继续测试?

最佳答案

你可以这样做:

private Timer timer = new Timer();

private void doSomething() {
final CountDownLatch latch = new CountDownLatch(1);

timer.schedule(new TimerTask() {
public void run() {
doSomethingElse();
latch.countDown();
}
},
(1000));

latch.await();
// check results
}

CountDownLatch#await() 方法将阻塞当前线程,直到 countDown() 被调用的次数至少达到构造时指定的次数,在本例中为一次.如果您想设置最长等待时间,您可以向 await() 提供参数。

可在此处找到更多信息:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html

关于java - 使用 JUnit 时让 TimerTask 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19749924/

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