2017-08-07 173 views
0

我有一個Python Clas和2種方法。如何在受測試的方法中模擬受保護/私有方法?

第一個,_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() 

有人可以給我一個提示,或解釋找到解決這個問題的解決辦法嗎?

+1

'def _getTemperature _()(self)'不是一個有效的語法。沒有這樣的東西叫做public和private,'_'只是Python中的一個約定,它不會改變任何東西(它僅在模塊導入時纔是特殊的)。 –

回答

1
fake_temp = 15 
with mock.patch.object(StateOn, '_getTemperature', return_value=fake_temp) as mock_temp: 
    result = StateOn().validateTemperature() 
    self.assertIsInstance(result, StateOff) 
+0

感謝您使用完美輸入提供的非常快速的回覆。我用@代替了@並添加到方法中。謝謝!! :) –