セロリ、モンゴ、レディス、ピラミッドを使用するかなり複雑なアプリがあります。テストには鼻を使います。私はTDDを行っていません(少なくともテストファーストではありません)が、かなりの量のカバレッジを得るために一生懸命努力しています。上記のサービスの一部と統合されている部分に行き詰まっています。たとえば、セロリ タスク間の共有メモリに redis を使用していますが、あまり問題なく memcache に切り替えられるようにしたいので、次の関数を抽象化しました。
import settings
db = StrictRedis(host=settings.db_uri, db=settings.db_name)
def has_task(correlation_id):
"""Return True if a task exists in db."""
return db.exists(str(correlation_id))
def pop_task(correlation_id):
"""Get a task from db by correlation_id."""
correlation_id = str(correlation_id) # no unicode allowed
task_pickle = db.get(correlation_id)
task = loads(task_pickle)
if task:
db.delete(correlation_id)
return task
def add_task(correlation_id, task_id, model):
"""Add a task to db"""
return db.set(str(correlation_id), dumps((task_id, model)))
また、永続ストレージに使用している抽象的な Mongo に対しても同様のことを行っています。
ダミーの http サーバーを実行し、ダミーのリクエストを作成し、さらにはダミーのデータベースを作成する統合 Web アプリケーションのテスト スイートを見てきました。セロリとピラミッドは問題ありませんが、mongo と redis のダミーを見つけることができなかったため、これらのサービスが実際に実行されている場合にのみ、上記のテストを実行できます。上記のダミーサービスを提供する方法はありますか?
- 外部サービスをインストールして実行する
- データベース全体を手動で作成および破棄する (インメモリ ダミーは、後でクリーンアップすることができます)