5

我在 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()

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

4

1 回答 1

8

我知道有两种方法:

1. 独立的测试数据库

这是 Django 自动为单元测试做的事情。它只是使用单独的数据库进行测试,在每次测试运行之前和之后都会清除该数据库。你可以手动实现这样的东西。

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

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

于 2013-05-15T04:23:50.957 回答