2023/11/03 (金) start 2023/11/05 (日) done

Python 関数テスト

関数やクラスを作成して、関数やメソッドの値(文字列も含む)が引数や入力の値の変更を加えた時に、想定した値になるか、 検証しておくことは重要であろう。特に複数人が関わるモジュール作成において、一人のつくったものがテストに合格していることは他者に安心感を与えることになる。関数テストは構文と独特の条件文のコーディングに慣れれば、そう難しいものではない。
ここで扱うテストモジュールはunittestというものであり、関数単体のテストに用いられるものである。そのモジュールにあるTestCaseと いうテストの集まりをクラスを利用して試行する。まずは、単純な関数でのテスト構文を俯瞰してもらう。次に、クラスの中で同一のオブジェクトに関係する複数のメッソドを一度にテストするsetUp()メッソドを利用したものを提示する。メソッドが複数のテストコードは一見、複雑に思えるが、構文を理解すれば、だんだんと理解できる。

# この単純関数では本来は関数を作成して保存し、関数をインポートして行うのが本来の姿だろう。
   ここでは、直接作成したものを、テストした.

import unittest

def func(a):
    v = a ** 2
    return v

class TestFunc(unittest.TestCase):
    """関数の値をテストする"""

    def test_func(self):
        func_value = func(9)
        self.assertEqual(func_value, 81) # 出力の値 == 想定の値がテストされる. == 同等記号

if __name__ == '__main__':      # このテストファイルが実行されると、メインと認識される。当該ファイル
    unittest.main()        をインポートしてもメインと認識されず、このブロック(スイート)は実行されない.

# 実行結果
Ran 1 test in 0.044s  # 1つのテストが実行された.所要時間は0.044秒. RanはRunの過去形.

OK                    # テストはpassした.

# 従業員の年収に賞与が出たとして、所与の年収にデフォルトの賞与やカスタム指定の賞与での想定年収額==関数値のテスト
# ファイル名 class_employee.py
class Employee:
    def __init__(self, last, first, annual):
        self.last = last
        self.first = first
        self.annual = annual
    def give_raise(self, increment=500000):
        self.annual += increment
        return self.annual

import unittest
from class_employee import Employee # クラスのインポート

class EmployeeRaiseTest(unittest.TestCase):

    def setUp(self):

        self.default_value = Employee('fake', 'name1', 3_500_000)  # 右辺クラスで属性を指定している 
        self.my_value = Employee('fake', 'name2', 2_500_000)     のでインスタンス化が必要.

    def test_give_default_raise(self):
        v = self.default_value.give_raise()
        self.assertEqual(v, 4_000_000)       # 年収350万+50万(デフォルト指定)
        
    def test_give_custom_raise(self):
        w = self.my_value.give_raise(1_000_000)
        self.assertEqual(w, 3_500_000)          # 年収250万+100万(カスタム指定)

if __name__ == '__main__':
    unittest.main()

# 実行結果
Ran 2 tests in 0.021s   # 二つのテストが実行された. 所要時間 0.021秒

OK
▲ トップへ戻る


戻る
カテゴリー