【问题标题】:How to mock a class from a third party library using Mocker如何使用 Mocker 模拟第三方库中的类
【发布时间】:2012-01-20 16:28:49
【问题描述】:

Mocker 有一个补丁功能,它说允许你替换一个类,这样这个类的所有实例都将被修补到你的模拟中。

我正在尝试对使用 pysnmp 的函数进行一些测试,并且我正在尝试模拟使用该库的调用。

在我的代码中,我这样做:

from pysnmp.entity.rfc3413.oneliner import cmdgen
commandGen = cmdgen.CommandGenerator()
... code that uses commandGen

在我的测试中我尝试过:

from mocker import Mocker
mocker = Mocker()
commandGenMock = mocker.patch(cmdgen.CommandGenerator)
commandGenMock.doSomething()
mocker.replay()

我得到以下信息:

Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
     mocker.replay()
  File "build\bdist.win32\egg\mocker.py", line 578, in replay
     event.replay()
  File "build\bdist.win32\egg\mocker.py", line 1757, in replay
    task.replay()
  File "build\bdist.win32\egg\mocker.py", line 2197, in replay
    self.is_monitoring))
  File "build\bdist.win32\egg\mocker.py", line 2157, in patch_attr
    setattr(obj, attr, value)
TypeError: can't set attributes of built-in/extension type 'classobj'

谁能解释我做错了什么?

【问题讨论】:

    标签: python unit-testing mocking


    【解决方案1】:

    提示,在您的测试中,尝试模拟实例而不是类:

    from mocker import Mocker
    mocker = Mocker()
    commandGen = cmdgen.CommandGenerator()
    commandGenMock = mocker.patch(commandGen)
    commandGenMock.doSomething()
    mocker.replay()
    

    【讨论】:

    • 感谢您的提示,但是当我尝试得到 TypeError: can't set attributes of built-in/extension type 'instance' 时,可能是我安装的 mocker 有问题?
    • 嗯,可能是这样,但我怀疑,不知何故,你试图以错误的方式使用 Mocker。抱歉,我不知道。
    猜你喜欢
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 2018-02-19
    • 2018-11-17
    • 2021-12-18
    • 2015-04-09
    相关资源
    最近更新 更多