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 に答える