使用addAsync对App Engine中的延迟任务进行单元测试

时间:2016-08-23 11:11:53

标签: java unit-testing google-app-engine

有没有办法可以强制完成对addAsync的所有通话?

@Test
public void aTest() throws Exception {
    SomeDeferredTask nextTask = new SomeDeferredTask();

    TaskOptions taskOptions = TaskOptions.Builder.withPayload(nextTask).
            etaMillis(1000).
            taskName("a-task-name");

    QueueFactory.getDefaultQueue().addAsync(taskOptions);

    LocalTaskQueue ltq = LocalTaskQueueTestConfig.getLocalTaskQueue();
    QueueStateInfo qsi = ltq.getQueueStateInfo().get(QueueFactory.getDefaultQueue().getQueueName());

    Assert.assertEquals(1, qsi.getTaskInfo().size());
}

我无法轻松使用Future返回的addAsync,因为我还需要检查创建任务的任务。否则我可以这样做:

    Future<TaskHandle> future = QueueFactory.getDefaultQueue().addAsync(taskOptions);
    future.get(1, TimeUnit.SECONDS);

我真正需要的是一种刷新addAsync任务队列并在完成时返回的方法。

有什么可以做的吗?

我能看到的唯一选择是将所有返回的期货添加到静态队列并编写一个方法以确保在继续我的测试之前完成所有这些。

1 个答案:

答案 0 :(得分:0)

  

我真正需要的是一种刷新addAsync任务队列并在完成时返回的方法。有什么可以做的吗?

我什么都不知道。我为自己写了一个这样的方法。它循环遍历所有排队任务,在每个截止日期之前调用deserialize(taskInfo.getBodyAsBytes()).run()。这是我希望看到的常见情况的更多代码,但当时我找不到更好的解决方案。如果您发现其他更好的事情,请告诉我们!