「
pythonでunittestをするには」にて、
しかし、複数のテストファイルを作成した後でまとめてテストを実行する手段がないようなので、以下のようなコードを書いてみました。
という記載がありますが、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
一括して実行できるだけでなく、任意のテストメソッドを選択することもできるので、テンポよく開発が進められると思いました。