首页 > 解决方案 > python中的修补和取消修补对象方法

问题描述

我有一个有多种方法的类。其中一种方法使用种子和伪随机数(使用 RandomState,以允许种子独立)。我们称它为方法 GEN_RND()。

问题是在尝试为使用 GEN_RND 的方法创建单元测试时(我们称之为 MY_METHOD())。我想暂时模拟 GEN_RND,仅用于这一测试,然后“取消修补”它,用于其余测试。知道怎么做吗?

import unittest
from unittest.mock import patch


def mock_GEN_RND(x, y):
    return 3

class TestMyObj(unittest.TestCase):
    obj_instance = MyObj()

    @patch.object(MyObj, 'GEN_RND', mock_GEN_RND)
    def test_MY_METHOD(self):
        x = obj_instance.MY_METHOD(0.3) 
        self.assertEqual(x, 3)  # test uses mock and should pass
    
    # How to "un-patch" from here to avoid inadvertently using mock_GEN_RND 
    # in subsequent tests?

标签: pythonunit-testingmocking

解决方案


Klaus D 接受的答案。模拟仅存在于装饰方法的范围内。


推荐阅读