[Python] setuptoolsでテストを実行する方法

はじめに

setuptoolsはPythonのプログラムをインストールしたり配布したりするためのツールですが、これを使えば、セットアップスクリプトがsetup.pyのとき、

$ python setup.py test

とすれば、テストを実行することもできるようになります。

設定方法

以下のようなディレクトリ構造を仮定します。

.
`-- src
    `-- foo
        `-- tests

すなわち、プロジェクトのトップディレクトリの下にソースコードを収めるsrcディレクトリがあり、その下にfooパッケージがあります。foo.testsパッケージには、テストケース(unittest.TestCaseクラスを継承しているクラス)があるサブパッケージやモジュールがあります。

このとき、以下のようなsetup.pyを記述します。

#! python
# -*- coding: utf-8 -*-

from setuptools import setup, find_packages

setup(name="foo", version="1.0", packages=find_packages("src"), 
    package_dir={"": "src"}, test_suite="foo.tests")

ポイントはsetup関数のtest_suite引数で、これにテストケースがあるパッケージ(この場合foo.tests)の名前を指定します。

こうすることで、

$ python setup.py test

とすれば、test_suite引数で指定されたパッケージ(サブパッケージやサブモジュールも含む)の中にあるすべてのテストケースを実行できます。

テストは冗長モードで実行されます。これを通常どおりに実行するときは、

$ python setup.py test -q

とします。