使用MongoEngine在Flask中测试套件

Dar*_*ech 5 python unit-testing test-suite mongoengine flask

我在Flask中有一个小应用程序,我想配合测试.我之前使用过Django测试,而我只是想要掌握Flask中的低级功能.

我的测试目前看起来像这样:

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='john@example.com')
        u.save()
Run Code Online (Sandbox Code Playgroud)

我知道这是错误的,因为测试通过但我在数据库中添加了一个条目.如何在不污染数据库的情况下测试用户的创建?我认为app.config['TESTING']这里有一些意义.

任何帮助非常感谢.

com*_*xer 8

我知道有两种方法:

1.单独的测试数据库

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

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

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

  • 嘲笑一个更好的解决方案?你一定是在开玩笑.模拟是很棒的避免API调用,加速测试(单层测试)和大量的东西,但使用它来避免在数据库中创建东西就像测试驾驶汽车而不坐在它上面.在这种情况下,解决方案1是正确的. (2认同)