![](/img/trans.png)
[英]How to mock a function that is defined in the same file and is not imported by the method being tested?
[英]How to mock a protected/private method in a tested method?
我有一個帶有 2 種方法的 Python Clas。
第一個, _getTemperature_()
是受保護的,第二個是公共方法。 我必須寫一個 unitTest 但我不知道如何模擬受保護的方法? 我剛剛找到了模擬直接在測試中使用的公共方法的教程。 但不是在一種可以測試的方法中。
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()
有人可以給我提示或解釋以找到有關此問題的解決方案嗎?
聚會有點晚了,但這里有一個替代方法:
from unittest import mock
class MyClass():
def __my_method(self):
# Implement logic here...
pass
def test_my_class():
my_class = MyClass()
my_class._MyClass__my_method = mock.Mock()
# Run testing stuff...
通過將my_class._MyClass__my_method
設置為mock.Mock()
我們有效地使用了一個模擬來代替私有方法。
請注意,我們需要設置my_class._MyClass__my_method
而不是my_class.__my_method
,因為 Python 對私有屬性的名稱my_class.__my_method
。
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()
fake_temp = 15
with mock.patch.object(StateOn, '_getTemperature', return_value=fake_temp) as mock_temp:
result = StateOn().validateTemperature()
self.assertIsInstance(result, StateOff)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.