0

私は2つの方法でPython Clasを持っています。テスト済みのメソッドで保護されたメソッドまたはプライベートメソッドをモックする方法はありますか?

第1の_getTemperature_()が保護され、第2のものがパブリックメソッドです。私は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

完璧な入力であなたの非常に速い応答に感謝します。私は@を 'with'に置き換えてメソッドに追加しました。ありがとうございました!! :) –

関連する問題