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

标签 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());
}

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

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

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

有什么办法可以做到这一点吗?

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

最佳答案

What I really need is a method to flush the queue of addAsync tasks and return when complete. Is there anything to do this?

我什么都不知道。我为自己写了一个类似的方法。它循环遍历所有排队任务,在每个已过截止日期的任务上调用 deserialize(taskInfo.getBodyAsBytes()).run()。对于似乎常见的情况,我希望有更多的代码,但当时我没有找到更好的解决方案。如果您发现其他更好的东西,请告诉我!

关于java - 使用 addAsync 对 App Engine 中的延迟任务进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39099585/

相关文章:

java - 为什么 Map#put 指定@throws ClassCastException?

java - 我们可以在 TestNG 中使用带有 expectedExceptions 的条件吗

php - 从 PHPUnit 测试访问数据库

c++ - 如何对依赖 Asio 的一段代码进行单元测试?

java - GAE - 找不到类 : Caused by: java. lang.ClassNotFoundExceptionAppIdentityCredential$AppEngineCredentialWrapper

python - Google App Engine - 关于 cron 任务的设计注意事项

java - AppEngine/Java Cron DeadlineExceededException

java - 为什么这段代码,倒写,打印 "Hello World!"

java - boolean 检查后单击单选按钮

java - 您好,尝试根据数组值打印一定数量的字符。 java