しかし、複数のテストファイルを作成した後でまとめてテストを実行する手段がないようなので、以下のようなコードを書いてみました。という記載がありますが、Python 2.6にてまとめてテストを実行する手段が追加されましたので、勝手にフォローさせていただきます。動作確認にはPython 3.3を使用しました。
テストプログラム
テストプログラムのディレクトリ構成とプログラムは以下のとおりです。
test ├test1.py ├test2.py └testsub ├__init__.py └testsub1.py
test/test1.py
# -*- coding: utf-8 -*- import unittest class TestCase1(unittest.TestCase): def test_success(self): pass def test_fail(self): self.fail() class TestCase2(unittest.TestCase): def test_success(self): pass def test_fail(self): self.fail() suite = unittest.TestSuite() suite.addTest(TestCase1('test_success')) suite.addTest(TestCase2('test_success'))
test/test2.py
# -*- coding: utf-8 -*- import unittest class TestCase1(unittest.TestCase): def test_success(self): pass def test_fail(self): self.fail()
test/testsub/__init__.py
空のファイルです。testsubをモジュールとして認識させるために必要です。
test/testsub/testsub1.py
# -*- coding: utf-8 -*- import unittest class TestCase1(unittest.TestCase): def test_success(self): pass def test_fail(self): self.fail()
フォルダ配下のテストをすべて実行する
pythonの-mオプションのパラメータとしてunittestを渡します。詳細な出力を得るために、-vオプションも追加します。
~/py/test $ python3 -m unittest -v test_fail (test1.TestCase1) ... FAIL test_success (test1.TestCase1) ... ok test_fail (test1.TestCase2) ... FAIL test_success (test1.TestCase2) ... ok test_fail (test2.TestCase1) ... FAIL test_success (test2.TestCase1) ... ok test_fail (testsub.testsub1.SubTestCase1) ... FAIL test_success (testsub.testsub1.SubTestCase1) ... ok ====================================================================== FAIL: test_fail (test1.TestCase1) ---------------------------------------------------------------------- Traceback (most recent call last): File "/cygdrive/c/home/myamamo/py/test/test1.py", line 10, in test_fail self.fail() AssertionError: None ====================================================================== FAIL: test_fail (test1.TestCase2) ---------------------------------------------------------------------- Traceback (most recent call last): File "/cygdrive/c/home/myamamo/py/test/test1.py", line 17, in test_fail self.fail() AssertionError: None ====================================================================== FAIL: test_fail (test2.TestCase1) ---------------------------------------------------------------------- Traceback (most recent call last): File "/cygdrive/c/home/myamamo/py/test/test2.py", line 10, in test_fail self.fail() AssertionError: None ====================================================================== FAIL: test_fail (testsub.testsub1.SubTestCase1) ---------------------------------------------------------------------- Traceback (most recent call last): File "/cygdrive/c/home/myamamo/py/test/testsub/testsub1.py", line 10, in test_fail self.fail() AssertionError: None ---------------------------------------------------------------------- Ran 8 tests in 0.004s FAILED (failures=4)
モジュールを指定してテストする
上のオプションに加え、モジュール名を追加するとモジュールのテストになります。
~/py/test $ python3 -m unittest -v test1 test_fail (test1.TestCase1) ... FAIL test_success (test1.TestCase1) ... ok test_fail (test1.TestCase2) ... FAIL test_success (test1.TestCase2) ... ok ====================================================================== FAIL: test_fail (test1.TestCase1) ---------------------------------------------------------------------- Traceback (most recent call last): File "test1.py", line 10, in test_fail self.fail() AssertionError: None ====================================================================== FAIL: test_fail (test1.TestCase2) ---------------------------------------------------------------------- Traceback (most recent call last): File "test1.py", line 17, in test_fail self.fail() AssertionError: None ---------------------------------------------------------------------- Ran 4 tests in 0.002s FAILED (failures=2)
クラスを指定してテストする
さらにクラス名を追加します。
~/py/test $ python3 -m unittest -v test1.TestCase1 test_fail (test1.TestCase1) ... FAIL test_success (test1.TestCase1) ... ok ====================================================================== FAIL: test_fail (test1.TestCase1) ---------------------------------------------------------------------- Traceback (most recent call last): File "test1.py", line 10, in test_fail self.fail() AssertionError: None ---------------------------------------------------------------------- Ran 2 tests in 0.001s FAILED (failures=1)
テストメソッドを指定してテストする
さらにメソッド名を追加します。
~/py/test $ python3 -m unittest -v test1.TestCase1.test_fail test_fail (test1.TestCase1) ... FAIL ====================================================================== FAIL: test_fail (test1.TestCase1) ---------------------------------------------------------------------- Traceback (most recent call last): File "test1.py", line 10, in test_fail self.fail() AssertionError: None ---------------------------------------------------------------------- Ran 1 test in 0.002s FAILED (failures=1)
テストスイートを指定してテストする
テストスイートを指定することもできます。要領はクラスやメソッドを指定する時と同様です。
~/py/test $ python3 -m unittest -v test1.suite test_success (test1.TestCase1) ... ok test_success (test1.TestCase2) ... ok ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK
一括して実行できるだけでなく、任意のテストメソッドを選択することもできるので、テンポよく開発が進められると思いました。
0 件のコメント:
コメントを投稿