2012-01-20 4 views
0

サードパーティのライブラリに依存しているコードをテストする際にモックしないと、それは次のようになります。はモックしたり、私は基本的にSNMPメッセージを送信するためにpySnmpライブラリを使用しての複雑さを隠蔽する機能を書かれている

snmpWalk(host,oid): 
    from pysnmp.entity.rfc3413.oneliner import cmdgen 
    cg = cmdgen.CommandGenerator() 
    comm_data = cmdgen.CommunityData('my-manager','public') 
    transport = cmdgen.UdpTransportTarget((host,161)) 
    variables = oid 
    return cg.nextCmd(comm_data,transport,variables) 

私はユニットテストに新しいです、と私はminimockを使用してdoctestのように、このコードのためのユニットテストを書くしようとしていた、これは私が思い付いたものです:

#Setup the mocks 
>>> from minimock import mock, Mock 
>>> cmdgen.CommandGenerator = Mock('cmdgen.CommandGenerator') 
>>> cmdgen.CommunityData = Mock('cmdgen.CommunityData') 
>>> cmdgen.UdpTransportTarget = Mock('cmdgen.UdpTransportTarget') 
>>> cgMock = Mock('cgMock') 
>>> cmdgen.CommandGenerator.mock_returns = cgMock 
>>> cmdgen.CommunityData.mock_returns = 1 
>>> cmdgen.UdpTransportTarget.mock_returns = 2 
>>> cgMock.nextCmd.mock_returns = (1,2,3,4) 
#run the test 
>>> PrinterMonitor.SnmpWalk('192.0.0.1','1.1.1.1.1.1.1') 
Called cmdgen.CommandGenerator() 
Called cmdgen.CommunityData('my-manager', 'public') 
Called cmdgen.UdpTransportTarget(('192.0.0.1', 161)) 
Called cgMock.nextCmd(1, 2, (1, 1, 1, 1, 1, 1, 1)) 
(1, 2, 3, 4) 

だから私はこのテストを実行し、それがうまくうまくいきます、しかし私の質問は、私は本当にすべてのこのエフェクトに行く必要がありますサードパーティの図書館のすべての面を嘲笑するにはどうすればいいですか??私の考えでは、私が実際に私の単体テストでプリンタにメッセージを出し始めるのではなく、ライブラリコードへの他の呼び出しが私に一貫した結果を与えるはずであるので、私が黙らなければならない最小限のものはcg.nextCmd(comm_data,transport,variables)です。私が彼らに渡すもの。自分のコードがライブラリと適切にやりとりできることを確認することができます(すなわち、ホスト変数を正しく移送変数に渡すことを確認してください)

答えて

0

あなたsnmpWalk()機能を使用していることをテストコードへのすべてのその努力?いいえ

を通じて、あなたは関数を含むクラスをモックする方が良いでしょう。私は、Pythonの用語を知っているが、Javaの用語ではありません、私はsnmpWalk()をインターフェイスに入れ、次にpySnmpの実装と任意の数のモック/テストの実装を行います。snmpWalk()を呼び出すコードは内部の詳細を気にする必要はありませんただ戻り値を気にするので、それはあなたが嘲笑したいレベルです。 pySnmp実装クラス自体をテストする

、あなたライブラリ呼び出しをモックができ、それは多くの作業だし、あなたのモックは非常に密接にライブラリをエミュレートする必要が与えられ、危険です。私は実際の電話にこだわるだけです。それが実際のプリンタ要求を撃退することを意味する場合、そのテストを非常に頻繁に実行しないでください。また、バーチャル/偽のプリンタに印刷するようにライブラリを設定する方法があるかどうかを確認してください。

関連する問題