テストコードを書いてみる

Python

今回はPython(v3.8.1)でテストコードのサンプルを書いてみました。

テストフレームワークはPythonの標準ライブラリである「unittest」を用いています。

・プロダクトコード(検証対象)

# coding:utf-8

def fizzbuzz(number):
    if number % 2 == 0:
        return str(number) + ": Even number"
    else:
        return str(number) + ": Odd number"

if __name__ == "__main__":
    for i in range(1, 101):
        print(fizzbuzz(i))

fizzbuzzという関数を実装しました。この関数は引数に入力された数字が偶数であるか奇数であるかを判断します。偶数であれはString型で「数字 : Odd number」を返却し、奇数であれば「 数字 : Odd number 」を返却します。

・テストコード

# coding:utf-8

import unittest
import fizzbuzz as fb

class FizzBuzzTest(unittest.TestCase):
    def setUp(self):
        # 初期化処理
        pass

    def tearDown(self):
        # 終了処理
        pass

    def test_odd(self):
        self.assertEqual("1: Odd number", fb.fizzbuzz(1))

    def test_Even(self):
        self.assertEqual("2: Even number", fb.fizzbuzz(2))

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

このテストではfizzbuzz関数に奇数(1)が渡されたときに、「1 : Odd number」が、

偶数(2)が 渡されたときに、「 数字 : Odd number 」が返却されていることをテストしています。

self.assertEqualメソッドの第1引数に結果の期待値を、第2引数にテスト対象の関数を記述し、それらの値が等価であるかを判定します。

テストを実行してみると

OKになればプロダクトコードはテストの期待値と一致してることになります。

仮にプロダクトコードのコードのifの等価演算子の実装を!=と間違った実装を行ったとしてテストコードを実行してみましょう。

def fizzbuzz(number):
    if number % 2 != 0:
        return str(number) + ": Even number"
    else:
        return str(number) + ": Odd number"

テストコードの実行結果は以下のようになりました。

AssertionErrorとなり、エラー箇所が明示的に示されています。

コメント

タイトルとURLをコピーしました