優れた開発者は、徹底的なテストを行わずにコードをデプロイすることはできません。単体テストは、大規模なプログラムの個々のモジュールをテストするプロセスです。

この記事では、Python 単体テスト モジュールを使用してコードの単体テストを実行する方法について説明します。まず、テストの種類について理解しましょう。

テストには、手動テストと自動テストがあります。手動テストとは、開発完了後に人間が手動でテストを行うテスト手法です。自動テストは、プログラムが自動的にテストを実行し、結果を提供するテスト手法です。

手動テストは時間がかかり、実行が難しいことは理解できたはずです。したがって、開発者はテスト (自動テスト) を実行するためのコードを作成します。自動テストにはさまざまな種類のテストがあります。その中には、単体テスト、統合テスト、エンドツーエンド テスト、ストレス テストなどがあります。

標準的なテストの流れを見てみましょう。

  • コードを作成または更新します。
  • コードのさまざまなケースに応じてテストを作成または更新します。
  • テストを実行します (手動またはテスト ランナーを使用)。
  • テスト結果を参照してください。エラーがある場合は、修正して手順を繰り返します。

ここでは、単体テストと呼ばれる最も重要かつ基本的なテストの種類について説明します。早速、実際のチュートリアルを見ていきましょう。

単体テストとは何ですか?

単体テストは、独立したコードの小さなブロックをテストする手法です。小さなブロックのコードは、ほとんどの場合関数になります。独立という言葉は、プロジェクト内の他のコードに依存しないことを意味します。

文字列が「」と等しいかどうかを確認する必要があるとします。そのために、引数を 1 つ受け取り、それが「」と等しいかどうかを返す関数を作成しました。

 def is_equal_to_(string):
	return string == ""

上記の関数は他のコードとの依存関係がありません。したがって、さまざまな入力を与えることで独立してテストできます。独立したコード部分はプロジェクト全体で使用できます。

単体テストの重要性

一般に、独立したブロックのコードはプロジェクト全体で使用できます。したがって、適切に記述してテストする必要があります。単体テストは、このようなタイプの独立したコード ブロックをテストするために使用されるテストです。プロジェクトで単体テストを使用しない場合はどうなりますか?

プロジェクト全体で使用されるコードの小さなブロックをテストしなかったと仮定します。他の小さなコード ブロックを使用する、統合テストやエンドツーエンド テストなどの他のすべてのテストは失敗する可能性があります。これによりアプリケーションが中断されます。そのため、コードの基本構成要素は十分にテストする必要があります。

これで、すべての独立したコード ブロックに対する単体テストと作成された単体テストの重要性がわかりました。単体テストを実行しているため、統合テストやエンドツーエンド テストなどの他のテストは、コードの独立したブロックが原因で失敗することはありません。

次のセクションでは、Python 単体テスト モジュールとは何か、および単体テスト モジュールを使用して Python で単体テストを作成する方法について説明します。

注: Python のクラスやモジュールなどに精通していることを前提としています。クラスやモジュールなどの Python の中級概念に精通していない場合は、以降のセクションを理解するのが難しいかもしれません。

Python単体テストとは何ですか?

Python Unittest は、Python コードをテストするための組み込みのテスト フレームワークです。テスト ランナーが備わっているため、手間をかけずにテストを実行できます。したがって、サードパーティのモジュールを使用せずに、組み込みのUnittestモジュールをテストに使用できます。ただし、要件に応じて変更されます。組み込みのUnittestモジュールは、Python でテストを始めるのに適しています。

Unittest モジュールを使用して Python コードをテストするには、次の手順に従う必要があります。

#1.コードを書きます。

#2. unittestモジュールをインポートします。

#3.キーワードtestで始まるファイルを作成します。たとえばtest_prime.py 。キーワードtest は、テスト ファイルを識別するために使用されます。

#4.クラスunittest.TestCaseを拡張するクラスを作成します。

#5.クラス内にメソッド(テスト)を記述します。各メソッドには、要件に基づいた異なるテスト ケースが含まれています。メソッドにはtestキーワードで始まる名前を付ける必要があります。

#6.テストを実行します。テストはさまざまな方法で実行できます。

  • コマンドpython -m unittest test_filename.pyを実行します。
  • コマンドpython test_filename.pyを使用して、一般的な Python ファイルと同様にテスト ファイルを実行します。このメソッドを機能させるには、テスト ファイルでunittestmainメソッドを呼び出す必要があります。
  • 最後に、 discover使用します。テストのファイル名を指定せずに、コマンドpython -m unittest discoverを使用してテストを自動実行できます。従った命名規則を使用してテストが検索されます。したがって、開始時にキーワードtestを使用してテスト ファイルに名前を付ける必要があります。

一般に、テストでは、コードの出力と予想される出力を比較します。したがって、出力を比較するために、 unittest にはさまざまなメソッドが用意されています。比較関数のリストはここにあります。

難しいことはなく、簡単に理解することができます。彼らは単純です。

それはたくさんの理論です。ここでコーディングに入る必要があります。

注: unittest モジュールについて質問がある場合は、 ドキュメントを参照して疑問を解消してください。早速、unittest モジュールを使用してみましょう。

Python での単体テスト (unittest を使用)

最初にいくつかの関数を作成してから、テストの作成に集中します。まず、お気に入りのコード エディターでフォルダーを開きます。そして、 utils.pyというファイルを作成します。次のコードをファイルに貼り付けます。

 import math


def is_prime(n):
    if n < 0:
        return 'Negative numbers are not allowed'

    if n <= 1:
        return False

    if n == 2:
        return True

    if n % 2 == 0:
        return False

    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True


def cubic(a):
    return a * a * a


def say_hello(name):
    return "Hello, " + name

utils.pyファイルには 3 つの異なる関数があります。ここで、異なるテスト ケースで各関数をテストする必要があります。最初の関数is_primeのテストを書いてみましょう。

#1. test_utils.pyというファイルをサンプル フォルダーにutils.pyとして作成します。

#2. utilsおよびunittestモジュールをインポートします。

#3. unittest.TestCaseクラスを拡張してTestUtilsという名前のクラスを作成します。クラス名は何でも構いません。クラスに意味のある名前を付けるようにしてください。

#4.クラス内に、引数としてselfを受け入れるtest_is_primeというメソッドを作成します。

#5. is_primeに引数を指定してさまざまなテスト ケースを作成し、その出力を予想される出力と比較します。

#6.テストケースの例self.assertFalse(utils.is_prime(1))

#7。上記の場合、 is_prime(1)の出力が false になることが予想されます。

#8.上記の場合と同様に、テストする機能に基づいて異なるテスト ケースを作成します。

テストを見てみましょう。

 import unittest

import utils


class TestUtils(unittest.TestCase):
    def test_is_prime(self):
        self.assertFalse(utils.is_prime(4))
        self.assertTrue(utils.is_prime(2))
        self.assertTrue(utils.is_prime(3))
        self.assertFalse(utils.is_prime(8))
        self.assertFalse(utils.is_prime(10))
        self.assertTrue(utils.is_prime(7))
        self.assertEqual(utils.is_prime(-3),
                         "Negative numbers are not allowed")


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

python filename.pyコマンドを使用してテストを実行するために、 unittestmainメソッドを呼び出しています。次に、テストを実行します。

以下のような出力が表示されます。

 $ python test_utils.py 
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

次に、他の関数のテスト ケースも作成してみます。関数のさまざまなケースを考えて、それらのテストを作成します。上記のクラスに追加された次のテストを見てください。

 ...


class TestUtils(unittest.TestCase):
    def test_is_prime(self):
        ...

    def test_cubic(self):
        self.assertEqual(utils.cubic(2), 8)
        self.assertEqual(utils.cubic(-2), -8)
        self.assertNotEqual(utils.cubic(2), 4)
        self.assertNotEqual(utils.cubic(-3), 27)

    def test_say_hello(self):
        self.assertEqual(utils.say_hello(""), "Hello, ")
        self.assertEqual(utils.say_hello("Chandan"), "Hello, Chandan")
        self.assertNotEqual(utils.say_hello("Chandan"), "Hi, Chandan")
        self.assertNotEqual(utils.say_hello("Hafeez"), "Hi, Hafeez")


...

ここでは、 unittestモジュールの比較関数の一部のみを使用しました。完全なリストはここで見つけることができます。

Unittest モジュールを使用して単体テストを作成する方法を学習しました。ここで、テストを実行するさまざまな方法を見てみましょう。

Unittest を使用してテストを実行する方法

テスト ケースを実行する方法については、上のセクションですでに説明しました。 Unittest モジュールを使用してテストを実行する他の 2 つの方法を見てみましょう。

#1.ファイル名とunittestモジュールを使用します。

このメソッドでは、unittest モジュールとファイル名を使用してテストを実行します。テストを実行するコマンドはpython -m unittest filename.pyです。この例では、テストを実行するコマンドはpython -m unittest test_utils.pyです。

#2. Discover メソッドの使用

Unittest モジュールのdiscoverメソッドを使用して、すべてのテスト ファイルを自動検出し、実行します。テスト ファイルを自動検出するには、キーワードtestで始まる名前を付ける必要があります。

Discover メソッドを使用してテストを実行するコマンドは、 python -m unittest discoverです。このコマンドは、名前がtestで始まるすべてのファイルを検出し、実行します。

結論👩‍💻

単体テストは、プログラミングの世界における基本的なテストです。現実世界には他にもたくさんのテストがあります。一つ一つ学んでみてください。このチュートリアルが、unittest モジュールを使用して Python で基本的なテストを作成するのに役立つことを願っています。 pytest、Robot Framework、nose、nose2、slash などのサードパーティ ライブラリがあります。プロジェクトの要件に基づいてそれらを探索できます。

テストをお楽しみください 😎

Python のインタビューの質問と回答にも興味があるかもしれません。

「 Python の単体テスト モジュール」についてわかりやすく解説!絶対に観るべきベスト2動画

【Pythonプログラミング入門】日付・時間の計算とカレンダーモジュールを解説!(relativedeltaモジュール) 〜VTuberと学習〜 【初心者向け】
【Pythonプログラミング入門】正規表現 (reモジュール) を解説!〜VTuberと学習〜 【初心者向け】

Share via
Copy link