2013-05-14 92 views
5

我有一個Flask小應用程序,我想伴隨測試。我之前使用過Django測試,並且我正在考慮使用Flask中的低級功能。測試套件在燒瓶與MongoEngine

我的測試目前是這樣的:

import unittest 
from config import app 
from mongoengine import connect 
from my_app.models import User 

class TestCase(unittest.TestCase): 

    def setUp(self): 
     app.config['TESTING'] = True 
     app.config["MONGODB_DB"] = 'xxx' 
     connect(
      'xxx', 
      username='heroku', 
      password='xxx', 
      host='xxx', 
      port=xxx 
     ) 
     self.app = app.test_client() 

    def tearDown(self): 
     pass 

    def test_create_user(self): 
     u = User(username='john', email='[email protected]') 
     u.save() 

我知道,這是不對的,因爲測試通過,但我增加了一個進入數據庫。我應該如何測試用戶的創建而不污染數據庫?我曾假設app.config['TESTING']在這裏有一些意義。

任何幫助非常感謝。

回答

7

有我認識的兩種方法:

1.單獨的測試數據庫

這是值得的Django的單元測試自動執行。它只是使用一個單獨的數據庫進行測試,以便在每次測試運行之前和之後清除它。你可以手動實現這樣的東西。

2.使用誚避免實際使用數據庫

這是在大多數情況下的更優選的方法。您使用模擬來模擬各種功能,以便測試不會實際創建/編輯/刪除真實數據庫中的信息。由於多種原因,這更好,尤其是單元測試的性能/速度。

+1

太好了。我得出這個結論 - 我已經習慣了Djago提供'魔術'。 Flask有沒有好的模擬庫? –

+0

你可以使用任何python模擬庫(例如'mock'),但對於數據庫更好找到一些已經嘲弄'mongoengine'或'pymongo'的包。看看另一個問題:http://stackoverflow.com/a/16017141/880326。 – tbicr

+2

嘲諷更好的解決方案?你一定是在開玩笑。嘲諷對於避免API調用,加速測試(單層測試)和大量東西,但是使用它來避免在數據庫中創建東西就像測試駕駛汽車而不坐在它上面是奇妙的。否。解決方案1在這種情況下是正確的。 –