Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在测试方法中模拟受保护/私有方法?_Python_Unit Testing_Python Unittest_Python Unittest.mock - Fatal编程技术网

Python 如何在测试方法中模拟受保护/私有方法?

Python 如何在测试方法中模拟受保护/私有方法?,python,unit-testing,python-unittest,python-unittest.mock,Python,Unit Testing,Python Unittest,Python Unittest.mock,我有一个带有2个方法的Python Clas 第一个,\u getTemperature()受到保护,第二个是公共方法。我必须编写一个单元测试,但我不知道如何模拟受保护的方法?我刚刚找到一些教程来模拟一个在测试中直接使用的公共方法。但不是用一种需要测试的方法 class StateOn(self): #Temperature in °C _target = 15 # currrent Temperature by Sensor in °C def _getTe

我有一个带有2个方法的Python Clas

第一个,
\u getTemperature()
受到保护,第二个是公共方法。我必须编写一个单元测试,但我不知道如何模拟受保护的方法?我刚刚找到一些教程来模拟一个在测试中直接使用的公共方法。但不是用一种需要测试的方法

class StateOn(self):

    #Temperature in °C
    _target = 15

    # currrent Temperature by Sensor in °C
    def _getTemperature_(self):
        return valueFromSensorXY()


    def validateTemperature(self):
        if self._getTemperature_() >= self._target:
            return StateOff()

有人能给我一个提示或解释来找到这个问题的解决方案吗?

晚会有点晚了,但这里有一个替代方法:

fake_temp = 15
with mock.patch.object(StateOn, '_getTemperature', return_value=fake_temp) as mock_temp:
    result = StateOn().validateTemperature()
    self.assertIsInstance(result, StateOff)
从unittest导入模拟
类MyClass():
定义我的方法(自我):
#在这里实现逻辑。。。
通过
def test_my_class():
my_class=MyClass()
my_class.\uMyClass\u_my_method=mock.mock()
#运行测试工具。。。
通过将
my\u class.\u MyClass\u my\u方法
设置为
mock.mock()


请注意,我们需要设置
my\u类。
而不是
my\u类。
my\u方法,因为Python具有私有属性。

def\u getTemperature()(self)
不是有效语法。没有所谓的公共和私有,
\uuu
只是Python中的一种约定,它不会改变任何东西(仅在模块导入中是特殊的)。感谢您以完美的输入快速回复。我用替换@to
,并添加到一个方法中。谢谢!!:)这个解决方案实际上似乎不适用于私有方法。I get类不具有该属性__FUNCTION@Corne私有函数(以_function()开头的函数)在解释类时被禁用,因此它们保持私有。例如,一个名为uu ex_function()的函数可能会被指定为afsdlfkjasdfjasldjfasjdfasjdf(),以使其在解释时成为私有的。上帝保佑你,先生。在过去的3天里,我一直在解决这个问题:)
def test_validate_temprature(self):
   state = StateOn()
   fake_temp = 15
   with mock.patch.object(state, '_StateOn__getTemperature_', return_value=fake_temp) as temp_mock:
       result = state.validateTemperature()
       self.assertIsInstance(result, StateOff)
       temp_mock.assert_called_once()