2012-01-20 69 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

謝謝你的提示,但是當我嘗試,我得到'類型錯誤:不能設置內置屬性-in/extension type'instance'',或許我的安裝模擬器有問題? – Ctrlspc

+0

那麼,情況可能是這樣,但我懷疑,不知何故,你試圖以錯誤的方式使用Mocker。對不起,我不知道。 – bpgergo

相關問題