Pythonでスタブテスト
Pythonでスタブテスト
code:Sensor.py
import random
class Sensor:
@property
def temperature(self):
return random.randint(10, 45)
code:Alarm.py
from sensor import Sensor
class Alarm:
def __init__(self, sensor=None) -> None:
self._low = 18
self._high = 24
self._sensor = sensor or Sensor()
self._is_on = False
def check(self):
temperature = self._sensor.temperature
if temperature < self._low or temperature > self._high:
self._is_on = True
@property
def is_on(self):
return self._is_on
Alermクラス
Sensorクラスを構成部品として持つ。
SensorクラスはTemperatureプロパティを持つ。
.check()が呼び出されると、
SensorインスタンスのTemperatureが18度より低いか、24度より高い温度を確認する
範囲を超えたらアラームが鳴動する。
テストしたい値を返すTestSensorインスタンス(スタブ)をいくつか生成して、Alermにぶち込んでテスト TestSensorは、コンストラクタからテストしたい温度を注入できる仕組み
code:TestAlerm.py
import unittest
from alarm import Alarm
from test_sensor import TestSensor
class TestAlarm(unittest.TestCase):
def test_is_alarm_off_by_default(self):
alarm = Alarm()
self.assertFalse(alarm.is_on)
def test_check_temperature_too_high(self):
alarm = Alarm(TestSensor(25))
alarm.check()
self.assertTrue(alarm.is_on)
def test_check_temperature_too_low(self):
alarm = Alarm(TestSensor(17))
alarm.check()
self.assertTrue(alarm.is_on)