【发布时间】:2021-03-09 10:54:59
【问题描述】:
我正在使用 python(3.6) unittest 内置库在我的单元测试中模拟一些对象。 不幸的是,我在模拟对象时遇到了一些问题。例如,我正在为不同文件中定义的函数编写测试。这个函数创建了一个 MyClass 的新实例,我想用一个模拟替换那个实例。所以我使用“补丁”。
#unit test file
....
@mock.patch('lib.mymodule.MyClass')
def test_myfunction(self, mock_myclass):
myfunction()
...
#Function file
from lib.mymodule import MyClass
....
def myfunction():
mc = MyClass
....
这不起作用,因为当测试调用 myfunction() 时,它会创建一个真正的“MyClass”对象,并且不会使用我尝试使用“patch”包含的模拟。
但是,如果我使用具有完整路径的类,则使用模拟
import lib.mymodule
....
def myfunction():
mc = lib.mymodule.MyClass
...
为了解决这个问题,我必须摆脱这种类型的导入:from ... import ... 。有没有人知道解决这个问题的另一种方法?
提前致谢
【问题讨论】:
标签: python unit-testing mocking