gpt4 book ai didi

python - 断言在 Python 单元测试中调用了一个方法

转载 作者:IT老高 更新时间:2023-10-28 21:37:28 24 4
gpt4 key购买 nike

假设我在 Python 单元测试中有以下代码:

aw = aps.Request("nv1")
aw2 = aps.Request("nv2", aw)

是否有一种简单的方法可以断言在测试的第二行期间调用了特定方法(在我的例子中是 aw.Clear())?例如有没有这样的:

#pseudocode:
assertMethodIsCalled(aw.Clear, lambda: aps.Request("nv2", aw))

最佳答案

我使用 Mock (现在是 unittest.mock 在 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 支持很多有用的功能,包括修补对象或模块的方法,以及检查是否调用了正确的东西等等。

Caveat emptor! (买家小心!)

如果您输入错误 assert_call_with(到 assert_call_onceassert_call_wiht),您的测试可能仍会运行,因为 Mock 会认为这是一个模拟函数并且除非您使用 autospec=true,否则请愉快地继续。欲了解更多信息,请阅读 assert_called_once: Threat or Menace .

关于python - 断言在 Python 单元测试中调用了一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3829742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com