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