在pytest fixtu中模拟stdlib函数

2024-05-29 02:02:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图模仿random.shuffle,这样我就可以从一些测试中得到可预测的结果。但是,我无法设置模拟。在

random.shuffle的调用位于应用程序顶部__init__.py文件中定义的函数中。我导入了random并使用了random.shuffle。我试图在我的应用程序中模拟它。我依靠pytest-mock来做模拟。在

我尝试了:mock.patch('aot.random')mock.patch('aot.random.shuffle')mock.patch('random')和{}都没有成功。我试图添加side_effect参数,但没有效果。在

我还尝试使用from random import shuffle和下面列出的mock.patch调用。在

我还试图在aot.utils.__init__.py中创建一个shuffle函数,并在我的测试中用mock.patch('aot.shuffle')和{}来模拟它(当然是在将它导入模块之后)

我发现奇怪的是,我能够正确地模仿其他类或函数。在

有办法吗?在

附加信息:


Tags: 文件函数py应用程序参数定义initpytest
1条回答
网友
1楼 · 发布于 2024-05-29 02:02:59

要从random中的函数得到幂等结果,可以设置seed。在

Python 3.6.2 (v3.6.2:5fd33b5926, Jul 16 2017, 20:11:06) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin

import random

lst = ['a', 'b', 'c']

random.seed(111)

for i in range(5):
    random.shuffle(lst)
    print(lst)

['c', 'b', 'a']
['a', 'c', 'b']
['a', 'b', 'c']
['b', 'a', 'c']
['a', 'b', 'c']

lst = ['a', 'b', 'c']

random.seed(111)
for i in range(5):
    random.shuffle(lst)
    print(lst)

['c', 'b', 'a']
['a', 'c', 'b']
['a', 'b', 'c']
['b', 'a', 'c']
['a', 'b', 'c']

相关问题 更多 >

    热门问题