pythonユニットテスト&ホワイトボックステスト-簡単な関数からユニットテストに着手


前言:ユニットテストはプログラムの品質を保証する礎であり、プログラミングの基礎を試す最初の関門でもある.ユニットテストの作成と実行は、ターゲットコードの動作が私たちの期待と一致していることを証明するためであり、上級モジュールに良好な安定した実行環境を提供するためである.
 
 
1.対象関数のすべての論理分岐を観察し、それらの設計例について:
プロジェクトのニーズは「スーパーマンかどうかを判断する」です.以下、Python 3に基づいて、判断カバー法でパラメータを設計してユニットテストを行います.
 
# coding = utf-8

import pytest

"""   :                (Superman)"""


def is_superman(skill, hand):
    #         ?
    can_fly = skill

    #    10   ?
    have_ten_fingers = hand

    if not can_fly:
        return False
    if not have_ten_fingers:
        return False

    #    True,             "  "
    return True

2.is_superman関数の「論理分岐」テーブルを設計すると、3ステップ(数列で数ステップ)が表示されるので、少なくとも3つの例を設計する必要があります.
  ** : 0 False,1 True**
分岐&ステップ
1
2
3
if
0
1
-
if
-
0
1
return
-
-
1
 
3.目標関数のすべてのパスを巡る考え方:
次にこのターゲット関数に対してテスタを設計し,3組の条件でテストを上書きした.
Python 3ベースのコードの例-テスト関数
"""   :  3   ,              """


def test_person():
    """   python  0==False,1==True ,         3        :"""
    test_cases = [
        [0, 0],
        [1, 0],
        [1, 1]
    ]

    """    3   ,        """
    expected_results = [False, False, True]

    """for          """
    for i in range(len(test_cases)):
        assert is_superman(test_cases[i][0], test_cases[i][1]) == expected_results[i]


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

4.スクリプトを実行し、テスト結果を表示します.
============================= test session starts ==============================
platform darwin -- Python 3.6.8, pytest-5.0.1, py-1.8.0, pluggy-0.12.0
rootdir: /Users/terry/PycharmProjects/SuperMancollected 1 item

test_func_unittest.py .                                                  [100%]

=========================== 1 passed in 0.01 seconds ===========================

Process finished with exit code 0

5.使用例を追加し、スクリプトを実行して新しいテスト結果を表示します.
def test_person():
    
    test_cases = [
        [0, 0],
        [1, 0],
        [1, 1],
        [0, 1], # 
============================= test session starts ==============================
platform darwin -- Python 3.6.8, pytest-5.0.1, py-1.8.0, pluggy-0.12.0
rootdir: /Users/terry/PycharmProjects/SuperMancollected 1 item

test_func_unittest.py F
test_func_unittest.py:26 (test_person)
False != True

Expected :True
Actual   :False


def test_person():
        """   python  0==False,1==True ,         3        :"""
        test_cases = [
            [0, 0],
            [1, 0],
            [1, 1],
            [0, 1],
        ]
    
        """    3   ,        """
        expected_results = [False, False, True, True]
    
        """for          """
        for i in range(len(test_cases)):
>           assert is_superman(test_cases[i][0], test_cases[i][1]) == expected_results[i]
E           assert False == True
E            +  where False = is_superman(0, 1)

test_func_unittest.py:41: AssertionError
                                                  [100%]

=================================== FAILURES ===================================
_________________________________ test_person __________________________________

    def test_person():
        """   python  0==False,1==True ,         3        :"""
        test_cases = [
            [0, 0],
            [1, 0],
            [1, 1],
            [0, 1],
        ]
    
        """    3   ,        """
        expected_results = [False, False, True, True]
    
        """for          """
        for i in range(len(test_cases)):
>           assert is_superman(test_cases[i][0], test_cases[i][1]) == expected_results[i]
E           assert False == True
E            +  where False = is_superman(0, 1)

test_func_unittest.py:41: AssertionError
=========================== 1 failed in 0.04 seconds ===========================

Process finished with exit code 0