在pytest fixture

时间:2017-08-06 20:11:38

标签: python python-3.x pytest

我正在尝试模仿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 shufflemock.patch来电。

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

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

有办法做到这一点吗?

附加信息:

1 个答案:

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