首页 > 解决方案 > Flask/ SQLAchemy 如何从 SQLAchemy 数据库中模拟值

问题描述

我需要从类 Link 对我的 generate_short_link 函数进行单元测试而不连接到数据库

模型.py

import string
from random import choices

from short_url import db


class Link(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    original_url = db.Column(db.String(512))
    short_url = db.Column(db.String(50), unique=True, index=True)
    expiration_date = db.Column(db.Date)

def __init__(self, **kwargs):
    super().__init__(**kwargs)
    self.short_url = self.generate_short_url()

# I need to write test for this function
def generate_short_url(self):
    characters = string.digits + string.ascii_letters
    short_url = ''.join(choices(characters, k=5))
    link = self.query.filter_by(short_url=short_url).first()

    if link:
        return self.generate_short_url()

    return short_url

测试.py

我的测试文件 import unittest from unittest import mock

from short_url import Link


class AddTest(unittest.TestCase):


def test_1_generate_short_url(query_property_getter_mock):
    # mock the query object
    obj_1 = Link()
    obj_2 = Link()
    # self.assertNotEqual(obj_1, obj_2)

# def test_2_add_link(self):


if __name__ == '__main__':
    unittest.main()

标签: pythonflaskmocking

解决方案


推荐阅读