2
我有一個相當複雜的應用程序,使用芹菜,芒果,redis和金字塔。我用鼻子進行測試。我不是在做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的虛擬變量,所以當這些服務實際運行時,我只能運行上述測試。有沒有辦法提供上述虛擬服務,所以我不有:
- 有安裝並運行外部服務,並
- 手動創建和銷燬整個數據庫(在內存中的假人可以指望清理後自己)
不,我知道的,但它是一個很酷的想法。 – Nicholas