1

タスクの結果を確認するための単体テスト目的で、GAE SDK に強制的にタスクを同期的に実行させる方法を知っていますか?

単体テストでキュー内のすべてのタスクの実行を待機して、タスクの結果を確認する方法を知っていますか?

タスクのデフォルトの非同期実行では簡単なテストができないため、タスク キューを使用して更新後にカウンターを確認する場合などには適していません。

このような単純なコードをテストすることを検討してください (テスト終了後に結果を確認します)。

  payload = pickle.dumps(args, protocol = pickle.HIGHEST_PROTOCOL)
  task = taskqueue.Task(url = TASK_ADD_ORDER_REVIEW_COUNTER,
                        payload = payload)
  task.add(queue_name = COUNTERS_QUEQUE)

task.add をスキップして TASK_ADD_ORDER_REVIEW_COUNTER から直接コードを呼び出すことは可能ですが、それは非常に醜い回避策であり、もっと簡単にすべきだと思います。

4

1 に答える 1

1

テストを2つの部分に分割することをお勧めします。

  1. 追加されたタスクかどうかを確認します
  2. タスクを処理するハンドラーが期待どおりに機能することを確認します

1.の場合、次のようにext.testbedを使用します

from google.appengine.ext import testbed

def setUp():
  self.testbed = testbed.Testbed()
  self.testbed.activate()
  self.testbed.init_taskqueue_stub()

def test():
  [do whatever triggers tasks]
  stub = self.testbed.get_stub('taskqueue')
  tasks = stub.get_filtered_tasks() # see (taskqueue_stub.py for details[2])
  [verify tasks is what you expected]

2.の場合、ハンドラーのテスト記事に従い、タスクハンドラーにリクエストを送信します。結局のところ、タスクは通常のPOST要求(要求パラメーターとしてエンコードされたパラメーター)として呼び出されます。

1 http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/api/taskqueue/taskqueue_stub.py#2453

于 2012-11-05T18:55:36.920 に答える