python-3.x - 如何模拟调用存储过程(python)的功能
问题描述
我想测试调用存储过程的函数。经过研究,我发现我们可以模拟(patch
)数据库操作。
我已经尝试修补与数据库的连接。
我想知道如何patch
调用函数funct2 ( call Stored Procedure
) 以便我可以手动给出它的输出
例如。存储过程的输出是:
data= ({'x': 13, 'y': 'san'})
这就是我的代码的样子
class db()
def __init__(host, user,password,dbname)
def funct2()
class A
def func1(self):
data = self.dbObj.funct2()
# use this data to test something
....
dbObj=db(host, user,password, dbname)
我不想在此测试期间连接到任何数据库,想在我的 function_test( func1 )中手动提供此输出
解决方案
通常,您会接受一个数据库(或某个数据库的某种抽象)作为构造函数的参数。这样您就可以轻松地传入一个模拟对象。例如:
import unittest
from unittest import mock
class A(object):
def __init__(self, db=None):
self.db = db
def func1(self):
data = self.db.func2()
return data
class ExampleMockingTest(unittest.TestCase):
def test_something(self):
mock_db = mock.MagicMock()
mock_db.func2.return_value = {'x': 13, 'y': 'san'}
# Pass in your mock to your object
a = A(db=mock_db)
# Do stuff with A...
self.assertIn('x', a.func1())
if __name__ == '__main__':
unittest.main()
For details on mocking in Python, see here.
推荐阅读
- vba - 我如何阅读复选框?
- c# - 从 .CS 文件到 .CSHTML 文件的整数调用
- python - 烧瓶上的sql查询语法错误
- node.js - Discord.js - 不同服务器中的不同变量
- python - 在 Python 中使用 Selenium 单击右侧的复选框
- modelica - 交换 Modelica FMU 模型
- go - Go 通道死锁没有发生
- .net - Azure AD SignOut 不适用于多个应用程序。即单点登出
- python - 在 Python 中,如何从列表列表中创建数据框?
- angular - 你什么时候在 httpclient Angular 中使用共享?