小编Emi*_*che的帖子

我可以使用unittest.mock.patch修补'随机'吗?

我有兴趣测试一些使用'随机'模块的代码,我希望能够在我的测试运行时修补/插入我自己的假随机版本,返回一个已知值,并将其恢复之后到正常的随机模块.从文档中我只能看到我可以修补类.有没有办法修补功能?像这样的东西:

def my_code_that_uses_random():
    return random.choice([0, 1, 2, 3])

with patch.function(random.choice, return_value=3) as mock_random:
    choice = my_code_that_uses_random()
    assert choice == 3
Run Code Online (Sandbox Code Playgroud)

该代码不起作用,我需要什么呢?

python unit-testing mocking python-3.x

6
推荐指数
1
解决办法
2193
查看次数

unittest.mock.patch一个类实例,并设置方法返回值

我有一个使用Sensor对象的Alarm对象.在我的测试中,我想用一个Stub修补Sensor.下面的代码可以工作,但我必须明确地将存根传递给Alarm构造函数:

#tire_pressure_monitoring.py
from sensor import Sensor

class Alarm:

    def __init__(self, sensor=None):
        self._low_pressure_threshold = 17
        self._high_pressure_threshold = 21
        self._sensor = sensor or Sensor()
        self._is_alarm_on = False

    def check(self):
        psi_pressure_value = self._sensor.sample_pressure()
        if psi_pressure_value < self._low_pressure_threshold or self._high_pressure_threshold < psi_pressure_value:
            self._is_alarm_on = True

    @property
    def is_alarm_on(self):
        return self._is_alarm_on

#test_tire_pressure_monitoring.py
import unittest
from unittest.mock import patch, MagicMock, Mock

from tire_pressure_monitoring import Alarm
from sensor import Sensor

class AlarmTest(unittest.TestCase):

    def test_check_with_too_high_pressure(self):
        with patch('tire_pressure_monitoring.Sensor') as test_sensor_class:
            test_sensor_class.instance.sample_pressure.return_value=22
            alarm = Alarm(sensor=test_sensor_class.instance)
            alarm.check()
            self.assertTrue(alarm.is_alarm_on)
Run Code Online (Sandbox Code Playgroud)

我想做的,但似乎无法找到实现的方法,是用存根替换Sensor实例,而不将Anthing传递给Alarm构造函数.这段代码看起来像我应该工作,但不是:

    def test_check_with_too_high_pressure(self): …
Run Code Online (Sandbox Code Playgroud)

python unit-testing mocking stub

4
推荐指数
1
解决办法
9511
查看次数

标签 统计

mocking ×2

python ×2

unit-testing ×2

python-3.x ×1

stub ×1