如何使用Mocker模拟第三方库中的类

0 投票
1 回答
1107 浏览
提问于 2025-04-17 10:42

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'

有没有人能告诉我我哪里做错了?

1 个回答

-1

这里有个小建议,在你的测试中,试着模拟实例,而不是模拟类:

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

撰写回答