我想模仿
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()
它不起作用。 print语句应该是true,而不是。如果您需要更多信息,请发表评论。
答案 0 :(得分:0)
这似乎有效
indexOf
答案 1 :(得分:0)
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()
对象替换的os_stat.return_value
对象具有包括st_size
在内的属性,并且您是要在模拟中设置其值的属性。
以完成工作的方式进行分配,但是请注意,默认情况下,在现有模拟上调用return_value
属性已经返回了Mock()
(除非您将其设置为某个值),因此将其设置为{ {1}}是不必要的。