Używam Mocka (który jest teraz unittest.mock na py3.3 +) do tego:
from mock import patch
from PyQt4 import Qt
@patch.object(Qt.QMessageBox, 'aboutQt')
def testShowAboutQt(self, mock):
self.win.actionAboutQt.trigger()
self.assertTrue(mock.called)
W twoim przypadku może to wyglądać tak:
import mock
from mock import patch
def testClearWasCalled(self):
aw = aps.Request("nv1")
with patch.object(aw, 'Clear') as mock:
aw2 = aps.Request("nv2", aw)
mock.assert_called_with(42)
Mock obsługuje wiele przydatnych funkcji, w tym sposoby łatania obiektu lub modułu, a także sprawdzanie, czy została wywołana właściwa rzecz itp.
Caveat emptor! (Kupujący, strzeż się!)
Jeśli błędnie wpiszesz assert_called_with
(do assert_called_once
lub assert_called_wiht
), twój test może nadal działać, ponieważ Mock pomyśli, że jest to wyszydzona funkcja i z radością pójdzie dalej, chyba że użyjesz autospec=true
. Aby uzyskać więcej informacji, przeczytaj assert_called_once: Threat or Menace .