J'utilise Mock (qui est maintenant unittest.mock sur py3.3 +) pour cela:
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)
Pour votre cas, cela pourrait ressembler à ceci:
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 prend en charge de nombreuses fonctionnalités utiles, notamment des moyens de patcher un objet ou un module, ainsi que la vérification que la bonne chose a été appelée, etc.
Caveat emptor! (Attention l'acheteur!)
Si vous vous trompez de saisie assert_called_with
(à assert_called_once
ou assert_called_wiht
), votre test peut toujours s'exécuter, car Mock pensera qu'il s'agit d'une fonction simulée et suivra avec plaisir, à moins que vous n'utilisiez autospec=true
. Pour plus d'informations, lisez assert_called_once: Threat or Menace .