如何使用sys.modules和mock.patch进行模拟对静态函数的Python干扰

所以我有这段代码可以模拟两次,第一次是通过以下方式模拟导入:

sys.modules['random'] = MagicMock()

第二次是在使用该导入功能的单元测试中发生的,例如,使用随机的功能

测试。 py是:

import sys
import unittest
from unittest import mock
from unittest.mock import MagicMock
import foo

sys.modules['random'] = MagicMock()

class test_foo(unittest.TestCase):

    def test_method(self):
        with mock.patch('random.choice',return_value = 2):
            object = foo.FooClass(3)
            self.assertEqual(2,object.method(),'Should be 2')

    def test_staticmethod(self):
        with mock.patch('random.choice','should be 2')

原始文件Foo.py是:

import random

class FooClass:

    def __init__(self,arg):
        self.arg = arg

    def method(self):
        print(random.choice)
        return random.choice([1,2,3])

    @staticmethod
    def staticmethod():
        print(random.choice)
        random.choice([1,3])

两个模拟相互矛盾,并且不会发生随机模拟。 当它随机打印时,实际上会打印:

<<bound method Random.choice of <random.Random object at 0x7fe688028018>>

我想要打印MagicMock。 有人可以帮助我了解发生了什么吗?他们为什么互相争吵?

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...