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

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

この記事では、Python 3.x(およびそれ以前のバージョン)に標準搭載されているunittestモジュールを使って、ソフトウェアテストの基礎を学んでいきます。unittestを利用すると、テストの自動化、セットアップ用コードと終了用コードの共有、そして各フレームワークに依存しない独立したテストの作成が可能になります。

ユニットテストでは、オブジェクト指向プログラミングのさまざまな概念が活用されます。ここでは、特によく使われる主要な概念について解説します。

  • 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つの形式で表示されます。

  • 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=2)

まとめ

この記事では、Python 3.xに標準搭載されているunittestモジュールを使ったユニットテストの基本について学びました。TestCaseの継承によるテストクラスの作成方法、代表的なアサーションメソッドの使い方、実行結果の読み方、さらに@unittest.skipデコレータによるテストのスキップ方法までを理解することで、信頼性の高いPythonコードを効率的に検証できるようになります。

  1. Pythonを使ってLinuxターミナルでテキストを装飾表示する方法

    Linuxターミナルにおけるテキスト装飾の基本 本記事では、Pythonを使ってLinuxターミナル上に整形(装飾)されたテキストを出力する方法を解説します。フォーマット機能を活用すれば、文字色やスタイルだけでなく、点滅といった特殊な視覚効果も自由に付与できます。 Linuxターミナルは、ANSIエスケープシーケンスと呼ばれる制御コードに対応しており、これによって文字装飾やカラー表示などが実現できます。仕組みとしては、テキストの中に特定のバイト列を埋め込み、ターミナルがそれを解釈するタイミングで指定した書式が反映されるというものです。 ANSIエスケープシーケンスの基本構文は次のとおりです。

  2. PythonでのCX_Freezeの使い方:スクリプトを実行ファイル(EXE)に変換する方法

    はじめに 何か面白いものを作りたいという欲求は人間の本能であり、完成したものは誰かに共有したくなるものです。Pythonでもその願いを叶えられます。ただし、作成したPythonスクリプトをそのまま共有するには、相手のマシンにも同じバージョンのPythonと、プログラムで使用しているすべてのモジュールがインストールされている必要があります。 そこで役立つのがCX_Freezeです。このツールを使えば、Pythonがインストールされていない環境でも動作するスタンドアロンの実行ファイル(.exe)を作成できます。 CX_Freezeのインストール まず、コマンドプロンプトで以下のコマンドを実行し、c