今回のお題
今回はpythonのunittestで用いられるparameterized
というパッケージを取り上げます。
parameterizedはパラメータを用いたテストを可能にするものです。
例えば以下のような関数を定義し、それをテストするとしましょう。
関数定義
def add(a, b):
return (a + b)
テスト
class MyTestCase(unittest.TestCase):
def test_add(self):
assertEqual(add(3, 5), 8)
if __name__ == "__main__":
unittest.main()
add関数は引数aとbがどんな数字であっても成り立ってほしいですが、上記の例では3 + 5 = 8
しか確認できていないので厳密性が担保できているとは言い難いです。
そのような場合にパラメータを用いることで複数のケースでのテストを容易にするのが、今回のテーマであるparameterized
です。
目次
- 導入方法
- コード例
導入方法
parameterizedはpipからインストールします。
% pip3 install parameterized
コード例
parameterizedを用いたコードの例は以下の通りです。
import unittest
from parameterized import parameterized
class MyTestCase(unittest.TestCase):
@parameterized.expand([
(3, 8, 11),
(7, 1, 8),
(9, 12, 21),
])
def test_add(self, input_a, input_b, expected_result):
print(f"input_a: {input_a}")
print(f"input_b: {input_b}")
print(f"expected_result: {expected_result}")
unittest.assertEqual(input_a, input_b, expcted_result)
if __name__ == "__main__":
unittest.main()
テスト関数の前に@parameterized.expand
を付けると、その引数をテスト関数が受け取ってくれるという仕組みです。
テスト関数に設定する仮引数の名前はなんでも構いません。