Python 如何在测试方法中模拟受保护/私有方法?
我有一个带有2个方法的Python Clas 第一个,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
\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()