Pythonで↓のようにEnumを分岐する処理を書いてみた。
from blood_types import BloodTypes def uranai(blood_type: BloodTypes): """血液型占い""" match blood_type: case BloodTypes.A: print("大吉") case BloodTypes.B: print("中吉") case BloodTypes.O: print("小吉")
PythonはJavaなどと違って、matchのルートに漏れがあってもコンパイルエラーにはしてくれない。
そのせいで、Enumに要素を追加する際に、実装漏れがないか結構気を使う。
(実際、↑のコードはAB型のルートが実装漏れしている)
そこで、以下のようにデフォルトのルートをNotImplementedErrorにしてみた。
from blood_types import BloodTypes def uranai(blood_type: BloodTypes): """血液型占い""" match blood_type: case BloodTypes.A: print("大吉") case BloodTypes.B: print("中吉") case BloodTypes.O: print("小吉") case _: raise NotImplementedError()
↑の修正に加えて、Enumの全パターンを通すようなユニットテストも用意する。
import unittest import blood_type_uranai from blood_types import BloodTypes class BloodTypeUranaiTest(unittest.TestCase): def test_uranai(self): # 全部の血液型で、エラーにならないことを確認 for blood_type in BloodTypes: blood_type_uranai.uranai(blood_type)
こういうユニットテストを用意しておけば、
Enumに要素が追加された場合に実装漏れしている処理があっても、テストがコケるのですぐに気がつくはず。