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

Pythonのユニットテスト(unittest)とは?基本から実行方法までわかりやすく解説

ユニットテストとは何か

ユニットテストとは、ソフトウェアを構成する個々の部品(ユニット)がそれぞれ正しく動作するかどうかを検証するテスト手法です。開発者にとって重要なプラクティスであり、ソフトウェアのすべてのコンポーネントが期待どおりに機能していることを保証します。主に開発工程のコーディング段階において、開発者自身によって実施されます。

ユニットテストを行うことで、問題の特定と修正が格段に容易になります。システムやソフトウェアのどのコンポーネントに不具合があるのかを把握できるため、該当するユニットだけをピンポイントで修正できるのです。

Pythonにおけるユニットテスト

Pythonには、ユニットテストを実行するための標準ライブラリunittestが組み込まれています。ユニットテストはコードを将来にわたって堅牢にします。開発者が「どのようなケースでコードが失敗しうるか」を事前に想定し、そのケースに対してコードを検証するからです。すべてのケースを網羅することは難しくても、大多数のケースをカバーし、それらに対してコードをテストすることが可能です。

unittestモジュールは、次のようにインポートして使用します。

import unittest

サンプルコードで学ぶユニットテスト

ここでは、正方形の面積を計算するシンプルな関数を例に考えてみましょう。このファイルを「area.py」という名前で保存してください。

def area(a):
    return (a+a)

次に、上記の関数が期待どおりの出力を返すかどうかを確認するユニットテストコードを作成します。テストコードは「unit_test.py」という名前で保存しましょう。

unit_test.py

from area import *
import unittest

class Testarea(unittest.TestCase):
    def test_area(self):
        self.assertAlmostEqual(area(5),25)
        self.assertAlmostEqual(area(3),9)
        self.assertAlmostEqual(area(4),16)

まず、テスト対象のコードが含まれるファイルをインポートします。続いて、unittestのメソッドassertAlmostEqual()を使用しています。第1引数でarea関数に入力値を渡して呼び出し、第2引数には関数が返すべき期待される出力を指定します。area()が返した出力が期待値と一致すればテストは成功、一致しなければ失敗となります。

それでは、コマンドプロンプトからunit_test.pyを実行し、area()のコードがテストに合格するかどうか確認してみましょう。

以下のコマンドを実行して、unit_testファイルを走らせます。

python -m unittest unit_test.py

実行結果(テスト失敗)

C:\Users\Inderjit Singh\Desktop>python -m unittest unit_test.py
F
======================================================================
FAIL: test_area (unit_test.Testarea)
----------------------------------------------------------------------
Traceback (most recent call last):
    File "C:\Users\Inderjit Singh\Desktop\unit_test.py", line 7, in test_area
        self.assertAlmostEqual(area(5),25)
AssertionError: 10 != 25 within 7 places (15 difference)

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)

残念ながら、コードはユニットテストに失敗しました。原因はトレースバックに出力されています。最初のアサーション self.assertAlmostEqual(area(5),25) でテストが失敗しています。関数は10を返しましたが、期待される出力は25だったからです。

この関数は単純なので、修正箇所もすぐに判明します。area()のコードが間違っていたのです。(a+a)ではなく(a*a)を返すべきでした。

そこで、area()のコードを修正して、再度ユニットテストを実行してみます。

def area(a):
    return (a*a)

unit_test.pyを再実行

C:\Users\Inderjit Singh\Desktop>python -m unittest unit_test.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

area()のコードを修正したことで、今度はOKステータスで正常に完了しました。これにより、unit_test.pyに定義されたすべてのケースに対してコードが正しく動作することが保証されます。

ここまで紹介したのは、ユニットテストの基本的な考え方をつかむためのごく簡単な例です。実際の開発現場では、unittestモジュールには他にもassertEqual、assertTrue、assertRaisesなど、さまざまな便利なアサーションメソッドが用意されており、これらを組み合わせることで、より厳密で信頼性の高いテストを構築できます。

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

    本記事では、Python 3.x(およびそれ以前のバージョン)に標準搭載されている unittest モジュールを通じて、ソフトウェアテストの基本を解説します。unittest を使うことで、テストの自動化、セットアップ用コードと終了処理コードの共有、そして各フレームワークごとの独立したテスト実行が可能になります。ユニットテストでは、オブジェクト指向のさまざまな概念が活用されます。ここでは、特によく使われる主要な概念について見ていきましょう。unittestの中核を担う4つの概念TestCase(テストケース):特定の入力に対する応答を検証するための基底クラスです。unittest の基底クラ

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

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