0

我正在尝试使用 java 中的 Awaitility 包为我的集成测试编写一个场景。

我有一个电话如下:

System.out.println(...)
await().atMost(10,Duration.SECONDS).until(myFunction());
and some code here....

在这里,它会等待 10 秒,直到调用 myFunction()。

我想要这样的东西,我的要求是:它应该每秒调用 myFunction() 持续 10 秒。有没有更好的方法呢?

4

2 回答 2

3

等待的默认轮询间隔是 100 毫秒(即 0.1 秒)。它记录在wiki的Polling 下。

如果要将轮询间隔设置为一秒,则将其添加到等待中:

with().pollInterval(Duration.ONE_SECOND).await().atMost(Duration.TEN_SECONDS).until(myFunction());

这应该每秒完成一次轮询,最长持续 10 秒。

这是一个非常简单的例子:

import static org.awaitility.Awaitility.*;
import org.awaitility.Duration;
import java.util.concurrent.Callable;

public class Test {

    private Callable<Boolean> waitmeme(int timeout) {
        return new Callable<Boolean>() {
            int counter = 0;
            int limit = timeout;
            public Boolean call() throws Exception {
                System.out.println("Hello");
                counter++;
                return (counter == limit);
            }
        };
    }

    public void runit(int timeout) {
        try {
            with().pollInterval(Duration.ONE_SECOND)
                  .await()
                  .atMost(Duration.TEN_SECONDS)
                  .until(waitmeme(timeout));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String args[]) throws Exception {
        int timeout = 11;
        if (args.length >= 1)
            timeout = Integer.parseInt(args[0]);
        new Test().runit(timeout);
    }
}
于 2018-07-19T09:40:01.470 回答
-1

它应该每秒调用 myFunction() 持续 10 秒

为什么不直接使用 Thread.sleep() 呢?

for(int i=1;10>=i;i++){
   myFunction();
   try{
      Thread.sleep(1000);
   }catch(InterruptedException e){
      System.out.println('Thread was interrupted!');
   }
}
于 2018-07-19T09:25:41.233 回答