Pythonでsetup.pyを使ってテストする場合のフォルダ構成
少し分からなかったので、備忘録として書いておく。
pythonでsrcとtestフォルダを分けていた場合、上手くテストが出来なかったので、色々調べてみた。
フォルダ構成
私が作ったフォルダは下記のような構成。
./Sample |--/src ・・・実行用スクリプト | |--/test ・・・テストスクリプト | |--setup.py
setup.pyはJavaでいうと、build.xmlやpom.xmlみたいなもの。
python setup.py test
とコマンドを打つと、テストを実行してくれます。
setup.pyを使った簡単なテスト例
まず、フォルダ・ソース構成は下記の通り
./Sample |--/src | |--__init__.py | |--sample.py |--/test | |--sample_test.py |--setup.py
__init__.py
from sample import *
__init__.pyはこれだけOK。
sample.py
#!/usr/bin/env python # -*- coding:utf-8 -*- class Calc: def add(self, x, y): return x+y
凄く簡単な例です。
説明は省略。
sample_test.py
#!/usr/bin/env python # -*- coding:utf-8 import unittest from sample import Calc class TestSample(unittest.TestCase): def test_sample(self): calc = Calc() self.assertEqual(15, calc.add(10, 5)) def suite(): suite = unittest.TestSuite() suite.addTests(unittest.makeSuite(TestSample)) return suite
これもunittestの簡単な例です。
TestCaseを継承したクラスを作成し、テストケースを作成しています。
suite()メソッドでテストケースをTestSuiteに追加しています。
setup.py
from setuptools import setup, find_packages import sys sys.path.append('./src') sys.path.append('./test') setup( name = "Sample", version = "0.1", packages = find_packages(), test_suite = 'sample_test.suite' )
重要なのは、2つのフォルダをパスに追加するところ。
import sys sys.path.append('./src') sys.path.append('./test')
これがないと"No module named sample_test"と出てしまい、テストが実行できません。
そして、test_suiteの指定。
test_suite = 'sample_test.suite'
ここでTestSuiteを設定してやります。
テストの実行
この構成でテストを実行してみると、テストが実行されているのが分かります。
C:\Sample>python setup.py test running test running egg_info writing Sample.egg-info\PKG-INFO writing top-level names to Sample.egg-info\top_level.txt writing dependency_links to Sample.egg-info\dependency_links.txt reading manifest file 'Sample.egg-info\SOURCES.txt' writing manifest file 'Sample.egg-info\SOURCES.txt' running build_ext test_sample (sample_test.TestSample) ... ok ---------------------------------------------------------------------- Ran 1 test in 0.000s OK
ファイル一式
試す人がいるか分からないけど、一応Dropboxに上げておきます。
setuppy.zip