测试非默认App Engine任务队列

Eri*_*ing 3 java google-app-engine

App Engine文档提供了单元测试任务队列的示例,它适用于"默认"队列,但我需要对非默认队列进行单元测试.

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

val qsi = ltq.getQueueStateInfo.get("non-default");
Run Code Online (Sandbox Code Playgroud)

我假设我需要在我的测试环境中配置非默认队列,就像需要配置非默认生产队列一样(通过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)
Run Code Online (Sandbox Code Playgroud)

Ric*_*ngi 5

是的,您将其配置为与其他单元测试工具类一样,并将其传递给测试queue.xml的路径,我的恰好位于/ 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));
Run Code Online (Sandbox Code Playgroud)

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

//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
Run Code Online (Sandbox Code Playgroud)

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

 java.lang.NoClassDefFoundError: org/mortbay/xml/XmlParser
Run Code Online (Sandbox Code Playgroud)

将其添加到您的pom.xml:

<dependency>
  <groupId>com.google.appengine</groupId>
  <artifactId>appengine-tools-sdk</artifactId>
  <version>${gae.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

  • 和fwiw - org.mortbay.xml包含在appengine-tools-sdk jar文件中...确保在你的测试类路径中 (6认同)
  • 谢谢里克.我的问题是appengine-tools-sdk丢失了. (2认同)