【问题标题】:Mock objects in pythonpython中的模拟对象
【发布时间】: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


    【解决方案1】:

    我找到了答案

    该类需要针对在何处被看到或使用进行修补。在这种情况下,它将是:

    @mock.patch('lib.module_with_function_file.MyClass')
    

    修补模块时也是如此

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多