App Engine文档提供example单元测试任务队列,适用于“默认”队列,但我需要对非默认队列进行单元测试。
我从以下行获得了一个例外:
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)
答案 0 :(得分: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));
然后你可以做一些事情(如果这不合情理,那就很抱歉,但它应该给你一个想法..而且它很时髦,所以看起来很奇怪)
//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>
答案 1 :(得分:0)
使用gradle插件时,请务必包含:
testCompile 'com.google.appengine:appengine-tools-sdk:1.9.9'