测试非默认App Engine任务队列

App Engine文档提供了unit testing任务队列的示例 ,它适用于“默认”队列,但我需要对非默认队列进行unit testing。

我从以下行获得了一个例外:

val qsi = ltq.getQueueStateInfo.get("non-default"); 

我假设我需要在我的测试环境中配置非默认队列,就像需要配置非默认生产队列一样(通过queue.xml),但我不知道如何解决这个问题。

我的测试环境中是否需要某个queue.xml文件? 如果是的话,在哪里。

我在资源目录中使用queue.xml文件尝试了以下操作,但它抱怨没有找到org/mortbay/xml/XmlParser

  val ltqtc = new LocalTaskQueueTestConfig ltqtc.setQueueXmlPath(this.getClass.getResource("queue.xml").getPath) val helper = new LocalServiceTestHelper(ltqtc) 

是的,您将其配置为与其他unit testing工具类一样,并将其传递给测试队列文件的路径,我的恰好位于/ src / test / resources(maven项目的常用位置)

这是我的基础junit测试类的片段…

 static { dir = System.getProperty("user.dir") + "/src/test/resources/queue.xml"; } private final LocalServiceTestHelper helper = new LocalServiceTestHelper( new LocalDatastoreServiceTestConfig(), new LocalTaskQueueTestConfig().setQueueXmlPath(dir)); 

然后你可以做一些事情(如果这不合适,那就很抱歉,但它应该给你一个想法..而且它很时髦,所以它可能看起来很奇怪)

 //do something that might trigger a queue to run... NotificationService.getInstance().doNotification(interaction) LocalTaskQueue taskQueue = LocalTaskQueueTestConfig.getLocalTaskQueue() Map allQueues = taskQueue.getQueueStateInfo() QueueStateInfo mailQueue = allQueues.get(EmailTaskQueue.MAIL_QUEUE) assert mailQueue.getCountTasks() == 1 

有关Rick Mangi评论的更多细节。 如果您收到如下错误:

  java.lang.NoClassDefFoundError: org/mortbay/xml/XmlParser 

将其添加到您的pom.xml:

  com.google.appengine appengine-tools-sdk ${gae.version}  

使用gradle插件时,请确保包括:

 testCompile 'com.google.appengine:appengine-tools-sdk:1.9.9'