gpt4 book ai didi

python - 在pytest fixture 中模拟stdlib函数

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

我正在尝试模拟 random.shuffle,以便从一些测试中获得可预测的结果。但是,我无法设置模拟。

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

我试过:mock.patch('aot.random'), mock.patch('aot.random.shuffle'), mock.patch ('random')mock.patch('random.shuffle') 没有成功。我尝试添加 side_effect 参数,但没有效果。

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

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

我觉得奇怪的是我能够模拟其他类或正常运行。

有办法吗?

附加信息:

最佳答案

要从随机中的函数获得幂等结果,需要设置一个种子

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']

关于python - 在pytest fixture 中模拟stdlib函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45536176/

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