4

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

我从以下行中得到一个例外:

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)
4

2 回答 2

6

是的,您像其他单元测试工具类一样对其进行配置,并将其传递给您的测试 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));

然后你可以做类似的事情(如果这与上下文无关,很抱歉,但它应该给你这个想法......而且它很时髦,所以它可能看起来很奇怪)

//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 中:

<dependency>
  <groupId>com.google.appengine</groupId>
  <artifactId>appengine-tools-sdk</artifactId>
  <version>${gae.version}</version>
</dependency>
于 2012-06-26T02:57:20.610 回答
0

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

testCompile 'com.google.appengine:appengine-tools-sdk:1.9.9'
于 2014-08-20T22:08:11.413 回答