测试套件在烧瓶与MongoEngine

问题描述:

我有一个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']在这里有一些意义。

任何帮助非常感谢。

有我认识的两种方法:

1.单独的测试数据库

这是值得的Django的单元测试自动执行。它只是使用一个单独的数据库进行测试,以便在每次测试运行之前和之后清除它。你可以手动实现这样的东西。

2.使用诮避免实际使用数据库

这是在大多数情况下的更优选的方法。您使用模拟来模拟各种功能,以便测试不会实际创建/编辑/删除真实数据库中的信息。由于多种原因,这更好,尤其是单元测试的性能/速度。

+1

太好了。我得出这个结论 - 我已经习惯了Djago提供'魔术'。 Flask有没有好的模拟库? –

+0

你可以使用任何python模拟库(例如'mock'),但对于数据库更好找到一些已经嘲弄'mongoengine'或'pymongo'的包。看看另一个问题:http://stackoverflow.com/a/16017141/880326。 – tbicr

+2

嘲讽更好的解决方案?你一定是在开玩笑。嘲讽对于避免API调用,加速测试(单层测试)和大量东西,但是使用它来避免在数据库中创建东西就像测试驾驶汽车而不坐在它上面是奇妙的。否。解决方案1在这种情况下是正确的。 –