2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pythonのparameterizedについてまとめる

Posted at

今回のお題

今回は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を付けると、その引数をテスト関数が受け取ってくれるという仕組みです。

テスト関数に設定する仮引数の名前はなんでも構いません。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?