■
先週末からZope3Bookを読みはじめました。13章から解説されているサンプルコンポーネント(book.messageboard)のユニットテストが動かずに困っていたのですが、やっと原因が分かりました。単に作成したモジュールがサーチパスに入っていないだけでした。
モジュールの置き場所がよく分からなかったので、site-packagesの直下に入れておいたのですが、$INSTANCE_HOME\lib\pythonの直下に入れておけばよいようです。または--test-pathオプションで適当なとこを指定してもよいみたいです。
testスクリプトの21〜26行目は次のようになっています。
here = os.path.dirname(os.path.realpath(__file__))
here = os.path.dirname(here)SOFTWARE_HOME = r"C:\Python24\Lib\site-packages"
instance_lib = os.path.join(here, "lib", "python")
具体的なディレクトリ構成では、こういうことになります。
C:\Python24
+-- Lib
+-- site-packages <--- testスクリプトのSOFTWARE_HOME変数
+--- zope
.
.
.C:\zopeinstance
+-- bin
| +-- test <-- testスクリプト
+-- lib
+-- python <--- testスクリプトのinstance_lib変数
+-- book
+-- messageboard
34〜38行目が次のようになっていますので、デフォルトでは--test-pathオプションに渡されるのは、C:\zopeinstance\lib\pythonということになります。ただし、--testzopeオプションをつければsite-packagesの方が対象になる、ということのようです。
if "--testzope" in sys.argv[1:]:
sys.argv.remove("--testzope")
defaults += ['--test-path', SOFTWARE_HOME]
else:
defaults += ['--test-path', instance_lib]
結局、次のコマンドでユニットテストを動かすことができました。
cd C:\zopeinstance
bin\test -vpu --package=book.messageboard
ドキュメントは大体Unixベースで書かれてますから、Windows環境しか使えないと細かな違いで結構ハマります。PythonもZopeも素人ですからハマると結構シンドいです。あぁメンドくさ。