假设我在 Python 单元测试中有以下代码:
aw = aps.Request("nv1")
aw2 = aps.Request("nv2", aw)
有没有一种简单的方法来断言特定方法(在我的例子中aw.Clear()
) 在测试的第二行期间被调用?例如有没有这样的事情:
#pseudocode:
assertMethodIsCalled(aw.Clear, lambda: aps.Request("nv2", aw))
I use Mock http://pypi.python.org/pypi/mock/(现在是单元测试.mock https://docs.python.org/dev/library/unittest.mock.html在 py3.3+ 上)为此:
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_called_once_with(42)
Mock 支持很多有用的功能,包括修补对象或模块的方法,以及检查是否调用了正确的东西等等。
买者自负! https://en.wikipedia.org/wiki/Caveat_emptor(买家小心!)
如果您输入错误assert_called_with
(to assert_called_once
或者只是交换两个字母assert_called_wiht
)你的测试可能仍然会运行,因为 Mock 会认为这是一个模拟函数并愉快地继续,除非你使用autospec=true
。欲了解更多信息,请阅读断言_调用_一次:威胁或威胁 http://engineeringblog.yelp.com/2015/02/assert_called_once-threat-or-menace.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)