サードパーティのライブラリに依存しているコードをテストする際にモックしないと、それは次のようになります。はモックしたり、私は基本的に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)
です。私が彼らに渡すもの。自分のコードがライブラリと適切にやりとりできることを確認することができます(すなわち、ホスト変数を正しく移送変数に渡すことを確認してください)