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

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

このチュートリアルでは、Pythonに標準搭載されているunittestモジュールを使ったユニットテスト(単体テスト)について学びます。テストはソフトウェア開発において非常に重要な役割を担っており、本番環境にリリースする前に問題点を発見するのに役立ちます。

ここでは、組み込みモジュールunittestを使用して、Pythonにおけるテストの基礎を習得していきましょう。それでは早速始めます。

ユニットテストとは?

ログインシステムを例に考えてみましょう。ログインフォームの各フィールド(ユーザー名、パスワードなど)は、それぞれ独立した「ユニット(構成要素)」です。これらのユニットごとの機能が正しく動作するかを検証することをユニットテストと呼びます。

基本的な構造の例

まず、unittestフレームワークの基本的な構造を見てみましょう。

# unittestモジュールをインポート
import unittest
# unittestは「test」で始まる名前のメソッドをすべて実行する
class SampleTest(unittest.TestCase):
    # TrueまたはFalseを返す
    def test(self):
        self.assertTrue(True)
# テストを実行
unittest.main()

出力結果

上記のプログラムを実行すると、次のような結果が表示されます。

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

「Ran 1 test」と表示され、最後に「OK」が出力されていれば、テストが正常に成功したことを意味します。

文字列メソッドのテスト

次に、さまざまな文字列メソッドに対してサンプルのテストケースを作成してみます。重要なポイントとして、テストメソッドの名前は必ず「test」で始める必要があることを覚えておいてください。

これから作成する各メソッドの概要は以下の通りです。

  • test_string_equality

    • unittest.TestCase の assertEqual メソッドを使用して、2つの文字列が等しいかどうかを検証します。

  • test_string_case

    • 同じく assertEqual メソッドを使用して、大文字・小文字の変換結果が期待どおりかどうかを確認します。

  • test_is_string_upper

    • assertTrue および assertFalse メソッドを使用して、文字列が大文字であるかどうかを判定します。

成功するテストの例

すべてのテストケースが成功するコードは以下の通りです。

# unittestモジュールをインポート
import unittest
class TestingStringMethods(unittest.TestCase):
    # 文字列が等しいかどうかのテスト
    def test_string_equality(self):
        # 両方の引数が等しければ成功
        self.assertEqual('ttp' * 5, 'ttpttpttpttpttp')
    # 大文字変換の比較テスト
    def test_string_case(self):
        # 両方の引数が等しければ成功
        self.assertEqual('tutorialspoint'.upper(), 'TUTORIALSPOINT')
    # 文字列が大文字かどうかのチェック
    def test_is_string_upper(self):
        # assertTrue内の式はTrue、assertFalse内の式はFalseでなければテストを通過しない
        self.assertTrue('TUTORIALSPOINT'.isupper())
        self.assertFalse('TUTORIALSpoint'.isupper())
# テストを実行
unittest.main()

出力結果

上記のコードを実行すると、すべてのテストケースが合格した場合、次のような結果が得られます。

...
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK

失敗するテストの例

次に、テストケースが失敗した場合の出力を確認してみましょう。以下のプログラムを実行してください。

# unittestモジュールをインポート
import unittest
class TestingStringMethods(unittest.TestCase):
    # 文字列が等しいかどうかのテスト
    def test_string_equality(self):
        # 両方の引数が等しければ成功
        self.assertEqual('ttp' * 5, 'ttpttpttpttpttp')
    # 大文字変換の比較テスト
    def test_string_case(self):
        # 両方の引数が等しければ成功
        self.assertEqual('tutorialspoint'.upper(), 'TUTORIALSPOINT')
    # 文字列が大文字かどうかのチェック
    def test_is_string_upper(self):
        # assertTrue内の式はTrue、assertFalse内の式はFalseでなければテストを通過しない
        self.assertTrue('TUTORIALSPOINt'.isupper())
        self.assertFalse('TUTORIALSpoint'.isupper())
# テストを実行
unittest.main()

出力結果

上記のプログラムを実行すると、次のような結果が表示されます。

======================================================================
FAIL: test_is_string_upper (__main__.TestingStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
File "p:/Python Work/Stopwatch/practice.py", line 21, in test_is_string_upper
self.assertTrue('TUTORIALSPOINt'.isupper())
AssertionError: False is not true
----------------------------------------------------------------------
Ran 3 tests in 0.016s
FAILED (failures=1)

このように、複数のテストケースの中でたった1つでも失敗すると、失敗した箇所の詳細な情報(トレースバック)とともに「FAILED」というメッセージが表示されます。これにより、どの部分に問題があるのかを素早く特定できます。

まとめ

このチュートリアルでは、Pythonのunittestモジュールを使ったユニットテストの基本として、テストクラスの作成方法、assertEqual・assertTrue・assertFalseといった主要なアサートメソッドの使い方、そしてテスト成功時と失敗時の出力の違いを学びました。テストを習慣化することで、バグの早期発見と品質の高いコード開発につながります。チュートリアルについて不明な点があれば、コメント欄でお知らせください。

  1. PythonとSeleniumでWhatsAppチャットボットを作る方法

    はじめに この記事では、Pythonを使ってWhatsAppのチャットボットを作成する方法を解説します。TwitterやFacebook向けの一般的なチャットボットとは異なり、WhatsAppは運営ポリシーの関係上、プラットフォーム上で直接ボットを動かすことができません。 しかし、SeleniumというPythonの強力なパッケージを使えば、ブラウザの操作を自動化することでこれを実現できます。Seleniumを利用すれば、ブラウザ経由で「WhatsApp Web」を自由に操作できるのです。 必要なもの 準備が必要なのは、主に以下の3点です。 1. Selenium Seleniumはpip

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

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