2012-06-25 33 views
2

App Engine文档给出了一个example单元测试任务队列,这对于“默认”队列可以正常工作,但我需要对非默认队列进行单元测试。测试非默认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

是的,你配置它就像其他单元测试工具类和通它的路径来测试queue.xml中,矿山恰好是在/ src目录/测试/资源(通常为一个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 

更多细节上的里克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> 
+6

和FWIW - org.mortbay.xml包含在appengine-tools-sdk jar文件中...确保它在你的测试类路径 –

+2

谢谢瑞克。我的问题是缺少appengine-tools-sdk。 –

+0

甜美!乐意效劳。 –

0

当使用gradle这个插件,确保包括:

testCompile 'com.google.appengine:appengine-tools-sdk:1.9.9' 
相关问题