Python

【Python】unittestを使ってテストを書く方法

この記事では、Pythonのunittestモジュールを用いてテストを書く方法を解説します。テストを実装することで将来コードが複雑になっても、そのコードが期待通りに動作することを保証してくれます。またコードを見直す際にテストを見ることで動作をまとめて見ることができ、コメントを書いておくことでコードを理解するのにも役立ちます。

テストの作成

テストを作成するにはunittestモジュールのTestCaseを継承させたクラスを定義し、メソッドとしてテストを実装します。

試しに簡単なモジュールを作成し、そのモジュールの関数のテストを実装してみましょう!

モジュールの作成

以下のようなmodule.pyを作成します。

module.py

def div(x, y):
    return x / y

中には引数を2つ取り、商を返すだけの関数を定義しました。

テストの実装

テストを実装するためのtest.pyを作成し、テストを書いていきます。

モジュールのインポート

必要なモジュールをインポートします。

import unittest
import module

クラスの定義

TestCaseを継承したクラスを定義します。クラス名はTest + モジュール名などにして何をテストしているかわかりやすく命名します。

class Testmodule(unittest.TestCase):
    ・
    ・
    ・

メソッドの定義

メソッドを定義してテストを実装します。テストを実装するメソッド名はtestから始まる必要があります。よくtest_関数名という名前が用いられます。

class Testmodule(unittest.TestCase):

    def test_div(self):
        self.assertEqual(2, module.div(4, 2))

メソッドの中を見てみます。

self.assertEqual(2, module.div(4, 2))

self.assertEqual()は渡された2つの値が等しいかテストするアサートメソッドです。このようなアサートメソッドを使ってテストを実装していきます。

この例では、2module.div(4, 2)の結果が等しくなるかテストしています。

アサートメソッドはいくつも定義できるので、エラーになるパターンなど想定できるパターンをそれぞれ実装することでテストがより強固となります。

最後に

最後にtest.pyがエントリーポイントとして実行された際にテストが実行されるためのコードを書いておきます。

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

テストの実行

先ほど作成したtest.pyを実行してみると以下のような結果が表示されます。

python test.py   
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

OKと表示されたので今回のテストは成功です。
では、失敗するパターンも見てみましょう!

次のようにアサートメソッドを書き換えてみます。

self.assertEqual(1, module.div(4, 2))

そして、実行すると以下のような結果が表示されます。

python test.py
F
======================================================================
FAIL: test_div (__main__.Testmodule)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/user/Desktop/Python/test.py", line 7, in test_div
    self.assertEqual(1, module.div(4, 2))
AssertionError: 1 != 2.0

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (failures=1)

FAILEDと表示され、テストが失敗しました。
今回はわざと失敗させたので問題ありませんが、テストが失敗したら実装を確認し、成功するように書き直しましょう!

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』