私はReviewBoard APIライブラリを使用していますが、今日は別のクラスにコードを移動し、いくつかのテストでロジックをカバーしたかったのです。私はモックとテストを理解していますが、私は明らかにPythonとそれがライブラリです。Pythonとモックを使用してレビューボードのサードパーティライブラリを黙って
<!-- language: python -->
from rbtools.api.client import RBClient
class ReviewBoardWrapper():
def __init__(self, url, username, password):
self.url = url
self.username = username
self.password = password
pass
def Connect(self):
self.client = RBClient(self.url, username=self.username, password=self.password)
self.root = self.client.get_root()
pass
そして、私は()メソッドが呼び出される初期化だけでなく、get_rootを主張したい:ここでは実際のコードの塊です。ここで私はそれを達成しようとする方法は次のとおりです。
<!-- language: python -->
import unittest
import mock
from module_base import ReviewBoardWrapper as rb
class RbTestCase(unittest.TestCase):
@mock.patch('module_base.RBClient')
@mock.patch('module_base.RBClient.get_root')
def test_client_connect(self, mock_client, mock_method):
rb_client = rb('', '', '')
rb_client.Connect()
self.assertTrue(mock_method.called)
self.assertTrue(mock_client.called)
そして、ここでは、私が立ち往生エラーがあります:
$ python -m unittest module_base_tests
F.
======================================================================
FAIL: test_client_connect (module_base_tests.RbTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/mock/mock.py", line 1305, in patched
return func(*args, **keywargs)
File "module_base_tests.py", line 21, in test_client_connect
self.assertTrue(mock_client.called)
AssertionError: False is not true
----------------------------------------------------------------------
Ran 2 tests in 0.002s
FAILED (failures=1)
は私が間違って何をしますか?インポートしたライブラリの「ローカルコピー」を正しく模倣していますか?問題は完全に別の領域にあるのでしょうか?
@mock.patch('module_base.RBClient.__init__')
および/または本:
私もこれを行うにしようとしているあなたのポストからの例では
self.assertTrue(mock_client.__init__.called)
:戻り値をあざけると戻り値のアサーションを行う例は、次のことを希望 assertTrue(mock_method.return_value.called) – qlf00n