2012-01-20 5 views
0

Mocker имеет функцию исправления, которую он говорит, позволяет заменить класс, чтобы все экземпляры этого класса были исправлены до вашего макета.Как издеваться над классом из сторонней библиотеки с помощью 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' 

Может кто-нибудь пролить свет на что я делаю неправильно?

ответ

0

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

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

Спасибо за совет, но когда я пытаюсь что я получаю 'TypeError: не может установить атрибуты встроенных -in/extension type 'instance'' вместо этого, может быть, есть проблема с моей установкой mocker? – Ctrlspc

+0

Ну, это может быть так, но я подозреваю, что вы пытаетесь использовать Mocker неправильно. Извините, я не знаю. – bpgergo

Смежные вопросы