python - 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()
解决方案
推荐阅读
- android - Volley 信任附加根证书
- python - 在 Pandas DataFrame 中存储列表:多索引错误
- reactjs - 蚂蚁设计 v4。如何在表单中显示来自自定义验证器的错误消息
- android - 使用外部 @DatabaseView 在 Room 中不起作用
- caching - 使用 Hazelcast 配置近缓存
- android - Android:删除存储访问框架的持久权限
- java - 键入列表 List
在减少累加器内不编译 - java - 在 Volley HTTP POST 请求中设置简单的字符串标头(不是键/值对)
- r - 将ggplot划分为不同的2 ggplot
- javascript - 如何将事件侦听器添加到这个用 JS 硬编码的 svg?