python - 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?
解决方案
Klaus D 接受的答案。模拟仅存在于装饰方法的范围内。
推荐阅读
- ruby-on-rails - Mongoid find_by 本地化字段的任何语言
- c++ - 多个 if 语句 cpp
- asp.net-mvc-5 - UserManager.SendEmailAsync,我可以放心地忽略它吗?
- java - 使用 Tomcat8 和 ErrorPageFilter 的 Spring Boot 战争部署
- sql - ElasticSearch:使用 OR AND 子句创建布尔查询
- c# - 将 netcore IConfigurationSection 绑定到动态对象
- python - 准确指定要从 matplotlib 图中删除的行
- c# - C# Ajax 获取请求
- php - Laravel Blade @foreach 指令未定义偏移量:1
- javascript - javascript 从 assoc 数组中删除(空)数组