Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのunittestモジュールで学ぶユニットテストの基礎

本記事では、Python 3.x(およびそれ以前のバージョン)に標準搭載されている unittest モジュールを通じて、ソフトウェアテストの基本を解説します。unittest を使うことで、テストの自動化、セットアップ用コードと終了処理コードの共有、そして各フレームワークごとの独立したテスト実行が可能になります。

ユニットテストでは、オブジェクト指向のさまざまな概念が活用されます。ここでは、特によく使われる主要な概念について見ていきましょう。

unittestの中核を担う4つの概念

  • TestCase(テストケース):特定の入力に対する応答を検証するための基底クラスです。unittest の基底クラス「TestCase」を継承して実装します。
  • TestSuite(テストスイート):複数のテストケースをひとつにまとめ、まとめて実行するために使用します。
  • TestRunner(テストランナー):結果に基づいてタスクを実行し、テスト実行後の結果表示を担当します。
  • TestFixture(テストフィクスチャ):関連する環境において、テストケースの土台となる事前準備・事後処理の基盤を提供します。

基本的なサンプルコード

それでは、実際に簡単な例を見ながら、ユニットテストの仕組みを確認してみましょう。

import unittest
class TestStringMethods(unittest.TestCase):
    def test_upper(self):
        self.assertEqual('TUTOR'.lower(), 'tutor')
    def test_islower(self):
        self.assertTrue('tutor'.islower())
        self.assertFalse('Tutor'.islower())
if __name__ == '__main__':
    unittest.main()

実行結果

...
-------------------------------
Ran 2 tests in 0.000s
OK

アサーションメソッドの使い方

上記のコードでは、unittest.TestCase クラスを単一継承によって拡張しています。また、assertEqual()、assertTrue()、assertFalse() といった組み込みメソッドを使用しています。

  • assertEqual():期待される出力と実際の結果を比較・検証します。
  • assertTrue():指定した条件が True であるかどうかを確認します。
  • assertFalse():指定した条件が False であるかどうかを確認します。

テスト結果の3つのステータス

上記コードの実行結果は、次の3種類のいずれかとして表示されます。

  • OK:すべてのテストが正常に完了したことを示します。
  • FAIL:テストケースが失敗し、AssertionError 例外が発生したことを示します。
  • ERROR:テスト実行中に例外やエラーが発生したことを示します。

テストをスキップする方法

デコレータ @unittest.skip(<理由>) を使うと、特定のテストを一時的にスキップできます。

import unittest
class TestString(unittest.TestCase):
    @unittest.skip("check skipped tests")
    def test_upper(self):
        self.assertEqual('TUTOR'.lower(), 'tutor')
    def test_islower(self):
        self.assertTrue('tutor'.islower())
        self.assertFalse('Tutor'.islower())
if __name__ == '__main__':
    unittest.main()

実行結果

...
------------------------------------------
Ran 2 tests in 0.000s
OK (skipped=1)

まとめ

本記事では、Python 3.x の unittest モジュールを使用したユニットテストの基本について学びました。TestCase クラスの継承、アサーションメソッドによる検証、テスト結果の読み方、そして skip デコレータによるテストのスキップなど、日常的な開発ですぐに役立つ内容を押さえておきましょう。ユニットテストを習慣化することで、コードの品質向上とバグの早期発見につながります。

  1. Pythonのunittestモジュールで学ぶユニットテストの基本

    この記事では、Python 3.x(およびそれ以前のバージョン)に標準搭載されているunittestモジュールを使って、ソフトウェアテストの基礎を学んでいきます。unittestを利用すると、テストの自動化、セットアップ用コードと終了用コードの共有、そして各フレームワークに依存しない独立したテストの作成が可能になります。ユニットテストでは、オブジェクト指向プログラミングのさまざまな概念が活用されます。ここでは、特によく使われる主要な概念について解説します。TestCase(テストケース):特定の入力に対する応答を検証するための基底クラスです。unittestの基底クラス「TestCase」を継

  2. Pythonで作るコンウェイのライフゲーム:基本ルールと実装方法を徹底解説

    1970年頃、イギリスの数学者ジョン・ホートン・コンウェイによって考案された「ライフゲーム(Game of Life)」は、生物の集団が見せるカオス的でありながらも秩序のある増殖の様子を表現する、シンプルな一連のルールです。盤面は「生存」セルと「死亡」セルで構成される二次元グリッドとして表現されます。 ライフゲームの基本ルール 過密(Overpopulation):あるセルの周囲に3つより多い生存セルが存在する場合、そのセルは次の世代で死滅します(OFF)。 維持(Static):周囲に2つまたは3つの生存セルが存在する場合、そのセルは次の世代でも生存し続けます(ON)。 過疎(Under