Pythonunittestモジュールを使用したユニットテスト

公開: 2021-11-08

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

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

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

手動でテストするのは時間がかかり、実行するのが難しいことを理解しているでしょう。 そのため、開発者はテスト(自動テスト)を実行するためのコードを記述します。 自動テストにはさまざまな種類のテストがあります。 それらのいくつかは、ユニットテスト、統合テスト、エンドツーエンドテスト、ストレステストなどです。

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

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

ここでは、ユニットテストと呼ばれる最も重要で基本的なテストタイプについて説明します。 これ以上面倒なことはせずに、実際のチュートリアルに飛び込みましょう。

ユニットテストとは何ですか?

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

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

 def is_equal_to_geekflare(string): return string == "Geekflare"

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

ユニットテストの重要性

一般に、独立したブロックコードはプロジェクト全体で使用できます。 したがって、それはよく書かれ、テストされなければなりません。 単体テストは、これらのタイプの独立したコードブロックをテストするために使用されるテストです。 プロジェクトで単体テストを使用しないとどうなりますか?

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

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

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

注: Pythonのクラス、モジュールなどに精通していることを前提としています。クラス、モジュールなどのPythonの中間概念に精通していない場合、次のセクションを理解するのが難しい場合があります。

Pythonユニットテストとは何ですか?

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

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

#1。 コードを書いてください。

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

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

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

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

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

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

一般に、テストでは、コードの出力を期待される出力と比較します。 したがって、出力を比較するために、 unittestはさまざまな方法を提供します。 比較関数のリストはここにあります。

簡単に理解できます。 それらは簡単です。

それは多くの理論です。 ここで、コーディングに取り掛かる必要があります。

注: unittestモジュールについて質問がある場合は、ドキュメントにアクセスして疑問を解消することができます。 それ以上遅れることなく、unittestモジュールを使用しましょう。

unittestを使用したPythonでのユニットテスト

最初にいくつかの関数を記述し、次にテストの記述に焦点を合わせます。 まず、お気に入りのコードエディタでフォルダを開きます。 そして、 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。 utilsunittestモジュールをインポートします。

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

#4。 クラスの中では、メソッドと呼ばれる書き込みtest_is_prime受け入れself引数としてを。

#5。 is_primeへの引数を使用してさまざまなテストケースを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()

私たちは、呼び出しているmainの方法unittest使用してテストを実行するモジュールをpython filename.pyコマンド。 次に、テストを実行します。

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

 $ 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("Geekflare"), "Hello, Geekflare") 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。 検出メソッドの使用

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

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

結論

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

ハッピーテスト

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