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

関連する問題