假设我在Python单元测试中有以下代码:
aw = aps.Request("nv1")
aw2 = aps.Request("nv2", aw)
有没有一种简单的方法可以断言在测试的第二行中调用了一个特定的方法(在我的例子中是aw.Clear()?例如,是否存在这样的情况:
#pseudocode:
assertMethodIsCalled(aw.Clear, lambda: aps.Request("nv2", aw))
我使用mock(现在是py3.3+上的unittest.mock)来完成以下操作:
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)
对于您的案例,可能如下所示:
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) # or mock.assert_