Suppose I have the following code in a Python unit test:
aw = aps.Request("nv1")
aw2 = aps.Request("nv2", aw)
assertMethodIsCalled(aw.Clear, lambda: aps.Request("nv2", aw))
I use Mock for this:
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)
For your case, it could look like this:
import mock def testClearWasCalled(self): aw = aps.Request("nv1") with patch.object(aw, 'Clear') as mock: aw2 = aps.Request("nv2", aw) mock.assert_called_with(42) # or mock.assert_called_once_with(42)
Mock supports quite a few useful features, including ways to patch an object or module, as well as checking that the right thing was called, etc etc.
Caveat emptor! (Buyer beware!)
If you mistype
assert_called_wiht) your test may still run, as Mock will think this is a mocked function and happily go along, unless you use
autospec=true. For more info read assert_called_once: Threat or Menace.