【问题标题】:Python: mock or patch a class with code executed in class initializationPython:使用在类初始化中执行的代码来模拟或修补类
【发布时间】:2021-01-26 13:13:54
【问题描述】:

我有两个文件,分别是“example.py”和“test.py”

example.py 是这样的:

  class Example(object):
    print('hello world')

    def greeting(self, words):
        print(words)

example.py 被导入到 test.py 中:

import example

这将导致代码 'print('hello world') 被执行。

在 unittest.mock 中是否有一种方法可以模拟()或补丁()类示例来停止 print('hello world') 被执行但仍然保持方法 greeting() 工作?

【问题讨论】:

  • 将 print 关联到方法(甚至构造函数)然后将其 return_value 修补为 None 不是更合适吗?
  • @Younes 问题是代码在我无法修改的库中

标签: python unit-testing mocking


【解决方案1】:

对不起,我没有足够的声誉来写评论,所以我不得不求助于写一个答案。

对于您提出的这种情况,我相信仅在初始化时抑制 sys.stdout 是可行的。但是我认为只能抑制“print('hello world')”的最终结果,而不是执行本身。

我没有证据,但我认为 unittest.mocks 确实解决了“对象”“类示例”(可能检查属性并动态“复制”它们)。因此,它需要在实际创建模拟之前存在“类示例”对象。因此,“类示例”的初始化已经发生,并且您有兴趣抑制的代码已经执行。

您是只对抑制该代码的结果还是执行本身感兴趣?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多