PythonでTDD その2で、気に入らない点の大部分は解決したのですが、まだtestsディレクトリのサブディレクトリにtests_を付ける必要があるという点が気に入らないのでそこも解決してみた。
そもそもなぜtests_を付けてたかと言うと、テストコードからテスト対象のコードをimportするときに同じディレクトリ名(パッケージ名)だとテストコード側が優先されてテスト対象がimport出来ないって事になるからでした。
つまり、ディレクトリ名(パッケージ名)を変えた上で、カレントディレクトリを前々回のディレクトリ構成図で示すところのsourceにして実行することで(sys.pathにはカレントディレクトリが含まれますので)、そこからテスト対象のパッケージ・モジュールが辿れるという仕組みだった訳ですな。
で、ディレクトリ名(パッケージ名)は被ってもモジュール名は被ってない(b.pyに対するbtest.pyのように)なら、然るべき検索パスを追加した上で、パッケージ名を使わずにimportしたらいいんじゃないか?
ということに気づいたので試してみました。
例えば、前々回のディレクトリ構成図で示すところのbtest.pyからb.pyをimportするにはbtest.pyに以下のように書くことになります。
import os, sys CURRENT_DIR = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, os.path.join(CURRENT_DIR, '../../libs')) import b
これで、テストコード側からテスト対象を直接import出来ました。めでたしめでたし、とはいかずorz
実はこの方法だと、テスト対象側のパッケージ自体をimportするにはどうしたらいいかという問題が残ります。
後ほど解決方法を考えてみよう。
あと、テストとテスト対象のソースファイル名(例えばbtest.pyとb.py)が違うのが少し気になりますが、これは同じにしてしまうとエディタ上で混同しやすくなり逆に利便性が下がる気がします。
実際よく使ってるTextWranglerではドキュメント一覧でファイル名しか表示されないので区別がつかないという事になります。
実はビルトイン関数のexecfileを使う方法も試してみたところうまくいったように見えたのですが、読み込んだソースの中で相対importを使ってると検索起点がexecfileを実行したモジュールになってしまって問題が出ます。
最近のコメント
名前
しゅごい
Jane Doe
FYI Avoid Annoying Unexpe…
Jane Doe
ご存じとは思いますが、whileには、”~の間”と…
peta_okechan
針金みたいなパーツを引っ張ると外れます。 他の方の…
虎徹ファン交換
虎徹の標準ファンを外す際に、どのようにして外されま…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…