gpt4 book ai didi

python检查是否调用了一个方法而不 mock 它

转载 作者:太空狗 更新时间:2023-10-30 01:04:32 26 4
gpt4 key购买 nike

class A():
def tmp(self):
print("hi")

def b(a):
a.tmp()

检查b中是否调用了tmp方法,推荐的方法是

a = A()
a.tmp = MagicMock()
b(a)
a.tmp.assert_called()

但是这里的 tmp 被模拟掉了,并没有导致 "hi" 被打印出来。

我希望我的单元测试能够检查方法 tmp 是否被调用而不用 mock 掉它。

这可能吗?

我知道这不是编写单元测试时期望的标准事情。但我的用例(有点棘手)需要这个。

最佳答案

您可以设置 Mock.side_effect成为原始方法。

from unittest.mock import MagicMock

class A():
def tmp(self):
print("hi")

def b(a):
a.tmp()

a = A()
a.tmp = MagicMock(side_effect=a.tmp)
b(a)
a.tmp.assert_called()

side_effect是一个函数(或者在本例中是绑定(bind)方法,是一种函数),调用Mock也会调用side_effect 具有相同的参数。

Mock() 调用将返回 side_effect 返回的任何内容,除非它返回 unnittest.mock.DEFAULT。单例。然后它将返回 Mock.return_value相反。

关于python检查是否调用了一个方法而不 mock 它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50970170/

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