gpt4 book ai didi

python - 如何模拟类的方法返回值

转载 作者:太空宇宙 更新时间:2023-11-04 05:04:40 25 4
gpt4 key购买 nike

我想 mock

os.stat(self.tmp_file).st_size

def original_func():
print (os.stat("test.txt").st_size==35)

我试过了

@mock.patch("os.stat")
def test(os_stat):
stat = mock.Mock()
stat.st_size.return_value = 35
os_stat.return_value = stat
original_func()

它不起作用。打印语句应该为真,但事实并非如此。

最佳答案

您可以在 Mocks 上设置任意属性。

import os
import mock


def original_func():
print(os.stat("test.txt").st_size == 35)


@mock.patch("os.stat")
def test(os_stat):
os_stat.return_value.st_size = 35
original_func()

test()

如果你想要一个 Mock 的任意属性,只需创建一个名称并将其设置为等于某物。如果你想要一个任意的方法,起一个名字,然后将它的 .return_value 的值设置为一些东西:

import mock

mocky = mock.Mock()

# create an attribute `foo_attribute` and set it to a string value
mocky.foo_attribute = "hi"
print(mocky.foo_attribute)

# create a method `foo_method()` and set it to return an integer value
mocky.foo_method.return_value = 100
print(mocky.foo_method())

详情

@mock.patch("os.stat") 装饰器正在模拟 os.stat()stat 的构造方法> 类。

os_stat.return_value 默认情况下,返回一个新的 Mock 对象实例,该实例将替换构造函数方法的返回值(stat 对象实例) - 在范围内def test,其中包括对 original_func 的嵌套函数调用。

您用 os_stat.return_value 对象替换的 os.stat() 对象具有属性,包括 st_size,它就是您要在模拟上设置值的属性。

按照您完成的方式分配它是可行的,但请注意,在现有模拟上调用 return_value 属性默认情况下已经返回 Mock()(除非您将其设置为一些值),因此无需将其设置为 Mock(st_size=35)

关于python - 如何模拟类的方法返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44824864/

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