RedHat系の提供するpythonには、デフォルトでunittest.pyというUnitTestを行うためのツールが付属していますので、これを利用してまずUnitTestを行ってみたいと思います。
まず、以下のようなサンプルプログラムを用意します。
このプログラムは、簡単な数値計算をするプログラムです。
Calc.pyというファイル名で保存してください。
次にこのプログラムに対するテストコードを作成します。
テストコード作成の手順
「test」で始まるメソッドを各テストケースとして実行します。このメソッドが実行される前にsetUpメソッド、実行後にtearDownメソッドが実行されます。
setUpメソッド
各テストメソッドが実行される前に、setUp()という名前のテンプレートメソッドが実行されます。 setUp()は、テスト対象のオブジェクトを生成したり、拡張モジュールをチェックするような場合に使用します。
tearDownメソッド
テストメソッドの実行が終了すると、それが成功したか否かにかかわらず、tearDown()という名前のテンプレートメソッドが実行されます。 tearDown()では、テスト対象のオブジェクトの後始末などを行います。
これをtestSuiteCalc.py というファイル名で保存します。
テストケースは、上記テストコードのようにテスト・スーツにグループ化することができます。
テストコードを作成したら、コードを実行してUnitTestを実行します。
次回は、trace2htmlを使ってコードカバレッジのレポートをHTML出力してみたいと思います。
class Calc:
def __init__(self):
self.intCount = 0
def tasu (self, number = 1):
self.intCount = self.intCount + number
def hiku (self, number = 1):
self.intCount = self.intCount - number
def kakeru (self, number = 1):
self.intCount = self.intCount * number
def waru (self, number = 1):
self.intCount = self.intCount / number
def dummy (self):
self.intCount = self.intCount
def population (self):
return self.intCount
Calc.pyというファイル名で保存してください。
次にこのプログラムに対するテストコードを作成します。
テストコード作成の手順
- * テストは、引数をとらないパブリックメソッドとして test* という名前で記述します
- * テストメソッドの中で アサーションメソッドを使用して、期待される値と実際の値が等しいことを確かめます。
「test」で始まるメソッドを各テストケースとして実行します。このメソッドが実行される前にsetUpメソッド、実行後にtearDownメソッドが実行されます。
setUpメソッド
各テストメソッドが実行される前に、setUp()という名前のテンプレートメソッドが実行されます。 setUp()は、テスト対象のオブジェクトを生成したり、拡張モジュールをチェックするような場合に使用します。
tearDownメソッド
テストメソッドの実行が終了すると、それが成功したか否かにかかわらず、tearDown()という名前のテンプレートメソッドが実行されます。 tearDown()では、テスト対象のオブジェクトの後始末などを行います。
#!/usr/bin/env python
import sys
import unittest
from Calc import *
class testCalc(unittest.TestCase):
def setUp(self):
self.myCalc = Calc()
def tearDown(self):
self.myCalc = None
def test0Tasu5(self):
self.myCalc.tasu(5)
assert self.myCalc.population() == 5, 'error testTasu5'
def test0Hiku5(self):
self.myCalc.hiku(5)
assert self.myCalc.population() == -5, 'error testHiku5'
def test10Kakeru2(self):
self.myCalc.intCount = 10
self.myCalc.kakeru(2)
assert self.myCalc.population() == 20, 'error testKakeru2'
def test10Waru2(self):
self.myCalc.intCount = 10
self.myCalc.waru(2)
assert self.myCalc.population() == 5, 'error testWaru2'
class testSuiteCalc(unittest.TestSuite):
def __init__(self):
tests = ['test0Tasu5', 'test0Hiku5', 'test10Kakeru2', 'test10Waru2']
unittest.TestSuite.__init__(self,map(testCalc, tests))
if __name__ == '__main__':
suite1 = unittest.TestLoader().loadTestsFromTestCase(testCalc)
suite2 = unittest.makeSuite(testCalc)
suite3 = testSuiteCalc()
# alltests = unittest.TestSuite([suite1, suite2, suite3])
alltests = unittest.TestSuite([suite3])
unittest.TextTestRunner(verbosity=2).run(alltests)
これをtestSuiteCalc.py というファイル名で保存します。
テストケースは、上記テストコードのようにテスト・スーツにグループ化することができます。
テストコードを作成したら、コードを実行してUnitTestを実行します。
$ python testSuiteCalc.py test0Tasu5 (__main__.testCalc) ... ok test0Hiku5 (__main__.testCalc) ... ok test10Kakeru2 (__main__.testCalc) ... ok test10Waru2 (__main__.testCalc) ... ok ---------------------------------------------------------------------- Ran 4 tests in 0.002s OK
次回は、trace2htmlを使ってコードカバレッジのレポートをHTML出力してみたいと思います。




Leave a comment