====== Pythonによる単体テスト ====== 標準のunittestやpytestなど幾つか選択肢はあるが、今回はunittestを利用する。cunitやjunitなど他の開発言語環境で用意されているものと同等の仕様であり、馴染みやすいというのが理由である。 ===== モック ===== モックはMagicMockを利用する。固定の戻り値はreturn_value、呼び出し回数毎に変えたい場合はside_effectを利用できる。 ===== import問題 ===== Pythonの標準とされている、テスト対象とテストコードを別のディレクトリに配置する場合、importの問題に悩まされることになる。解決策は幾つかあるが、今回は相対パスによる解決法を採用した。 テスト対象コード内のimportは全て相対パスでカレントを指定する。これでテストコードからテスト対象をimportしても、テストコードと同じ階層からモジュールを探索できるので、テスト対象およびテストコードの最上位パッケージ名を経由しなくても良くなる。 注意点として実行パスを上に遡って別のパッケージを参照しにいくことはPythonの仕様上禁止となるので、テスト対象とテストコードが配下にくる階層を実行起点にすること。 Python -m xxx.yyy