[英]Mocking dependencies
我是 Python 新手,并试图了解如何在 UT 中模拟方法。
这是我的测试test_module2.py
from module2 import A
import unittest
from unittest.mock import patch, MagicMock
class TestBulkLoad(unittest.TestCase):
@patch('simple_module.SimpleModuleClass')
def test_fun(self, a):
a.simpleFun = MagicMock(return_value=3)
testA = A()
testA.fun()
assert a.simpleFun.called
我想检查依赖的SimpleModuleClass
被模拟和调用
模块2.py
from simple_module import SimpleModuleClass
class A:
def fun(self):
print('I am from A class')
thing = SimpleModuleClass()
thing.simpleFun()
return -1
simple_module.py
class SimpleModuleClass:
def simpleFun(self):
print("I am from SimpleModuleClass")
return 0
我得到断言错误。 你能帮我理解如何解决这个问题吗?
a.simpleFun = MagicMock(return_value=3)
这一行只是修改你的模拟对象a
的方法(你真的应该重命名simpleModuleMock
,因为它是一个SimpleModule
类的模拟而不是A
)。 它不会在代码中的任何地方模拟SimpleModule
每个实例,因此为什么在A.fun()
实例化SimpleModule
的实例而不是SimpleModule
的模拟实例。
我会使用依赖注入并将SimpleModule
的实例传递给A.fun()
而不是在其中实例化它,以便您可以传递模拟。 您也可以像这样将thing
公共变量:
test_module2.py :
class TestBulkLoad(unittest.TestCase):
@patch('simple_module.SimpleModuleClass')
def test_fun(self, simpleModuleMock):
simpleModuleMock.simpleFun = MagicMock(return_value=3)
testA = A()
A.thing = simpleModuleMock
assert(testA.fun() == -1)
# assert simpleModule.simpleFun.called
assert isinstance(simpleModuleMock.simpleFun, MagicMock)
模块2.py :
class A:
thing = SimpleModuleClass()
def fun(self):
print('I am from A class')
self.thing.simpleFun()
return -1
请注意,Python 可能存在更好的解决方案,但如果有,1. 我不知道它们,以及 2. 我怀疑它们是好的做法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.