我正在尝试模仿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')
进行模拟(当然,在模块中导入后)
我觉得奇怪的是我能够模拟其他类或正确运行。
有办法做到这一点吗?
附加信息:
random.shuffle
功能使用here 答案 0 :(得分:1)
要从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']