先週末から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環境しか使えないと細かな違いで結構ハマります。PythonZopeも素人ですからハマると結構シンドいです。あぁメンドくさ。