Ich benutze ReviewBoard API-Bibliothek und heute habe ich den Code in separate Klasse verschoben und wollte die Logik mit einigen Tests abdecken. Ich verstehe Mocks und Tests, aber ich bin eindeutig nicht viel Erfahrung mit dem Python und seinen Bibliotheken. Hier ist das Stück des echten Code:Mocking ReviewBoard Drittanbieter-Bibliothek mit Python und Mock
<!-- 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
Und ich mag die Initialisierung sowie die GET_ROOT() Methoden aufgerufen werden behaupten. Hier ist, wie ich versuche, das zu erreichen:
<!-- 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)
Und hier ist der Fehler, den ich angesteckt:
$ 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)
Was mache ich falsch? Spotte ich die "lokale Kopie" importierter Bibliotheken richtig? Liegt das Problem vollständig in einem anderen Bereich?
@mock.patch('module_base.RBClient.__init__')
und/oder dies:
Ich habe auch dies zu tun versucht, aus Ihrem Post
self.assertTrue(mock_client.__init__.called)
Wie unten durch Dangar erwähnt, neben der falschen Reihenfolge der Patch-Dekorateure die Lösung des Rückgabewert zu behaupten war: assertTrue (mock_method.return_value.called) – qlf00n