私が歌川です

@utgwkk が書いている

別ディレクトリのテストを走らせるためにテストスクリプトに import sys; sys.path.append('.') って書きたくないけどどうすればいいんですか

普段は nosetests とか使っているので回避しているけど,たとえばコードカバレッジを取りたいので coverage run test/test_hoge.py を実行する,といったときに困る.

古典的な対処法として,テストの先頭*1に,

import sys
sys.path.append('.')

と書けば,カレントディレクトリのモジュールを import 対象に含めてくれるけど,こうすると PEP8

Imports are always put at the top of the file, just after any module comments and docstrings, and before module globals and constants.

という一文に反してしまう(し,実際 pycodestyle にかけたときに怒られる).どうすればいいのか調べてみたところ次の Stack Overflow の解答に出くわした.

stackoverflow.com

テストモジュールのディレクトリに,

import sys
sys.path.append('.')

を行うモジュールを配置し,それぞれのテストでそのモジュールを import してやれば解決した.

*1:正確には,テスト対象のモジュールを import する前.