Как макетировать класс из сторонней библиотеки с помощью Mocker - PullRequest
0 голосов
/ 20 января 2012

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 Ответ

0 голосов
/ 20 января 2012

Просто совет, в своем тесте попробуйте смоделировать экземпляр вместо класса:

from mocker import Mocker
mocker = Mocker()
commandGen = cmdgen.CommandGenerator()
commandGenMock = mocker.patch(commandGen)
commandGenMock.doSomething()
mocker.replay()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...