コードのテストは、ソフトウェア開発ライフサイクルの重要な部分であり、アプリケーションを本番環境にデプロイする前に必ず行う必要があります。テストは、コード内のバグを追跡して見つけるのに役立つため、非常に重要です。
テストは、コードを本番環境に出荷する前に、ソース コードの個々のユニットをチェックして最適に動作することを確認する方法です。単体テスト中は、ユーザーのためにソース ファイルを本番環境にデプロイする必要がないことに注意してください。
テストは Python に固有のものではないことも覚えておいてください。
この記事では、Python 単体テストを使用して基本的なテストを作成し、テスト中にコードが成功するか失敗するかを確認する方法を説明します。
このチュートリアルを完了するには、次のものが必要です。
書き込みテストは、プログラマーがコードベースをテストするために作成する論理プログラムです。開発中、QA は、製品をユーザーに出荷する前に、アプリの改善が必要な点を強調するプロセスを理解する必要があります。この目的のために、2 つの数値を合計して結果を返す関数を作成しましょう。
まず、このチュートリアルでテストを作成するためのすべてのファイルを含むフォルダーを作成します。 main.py
という名前のファイルを追加して、この新しいフォルダーに関数を書き込みます。
# main.py # Add the sum of two numbers def add_sum(num1, num2): return int(num1) + int(num2)
上記のコード ブロックができたので、ユーザーが入力プロンプトを介して目的の値を入力できるようにする関数を記述して、コードが機能することを確認しましょう。関数add_sum()
は 2 つの数値をパラメーターとして取り、演算子+記号を使用して値を返し、合計を取得します。別のファイルresult.py
に、次のコードをコピーして貼り付けます。
# result.py from main import add_sum print("Please enter the two values\n") num1 = int(input("Please enter the first number: \n")) num2 = int(input("Please enter the second number: \n")) total = add_sum(num1, num2) print(f"The sum of the values is {total}")
このコード ブロックは次のことを行います。
main.py
add_sum()
をインポートしますint
メソッドを使用して、入力プロンプト値を整数に変換しました
Python には、コードのテストを作成および実行するためのツールを提供する unittest と呼ばれる組み込みの標準ライブラリ モジュールが付属しています。単体テストの主な目的は、すべてのコード関数が期待どおりに動作するかどうかを確認することです。
テスト ケースは、単体テストを操作する標準的な方法であり、テスト名クラスで機能を利用できます。また、単体テスト用のコンポーネントコードにはテストケースが必須です。さまざまな assert メソッドを使用して、コードの実行直後にエラーをチェックして報告します。
このセクションでは、一連のテストを作成します。
add_sum()
関数のすべてのテスト ケースを記述するためのテスト ファイルを作成する前に、 main.py
を更新しましょう。次のコードをコピーして貼り付けます。
# main.py def add_sum(num1, num2): try: return int(num1) + int(num2) except ValueError as err: return err
コード ブロックは、コード内の例外を処理するtry/except
ステートメントを使用して、except ブロックにエラーがある場合に警告します。プログラミングのこの方法は、エラーをキャッチするのに役立ち、エラーが発生した特定の行番号を示します。
次に、同じディレクトリに test.py という名前のテスト ファイルを作成します。このファイルに、次のコードをコピーして貼り付けます。
# test.py import unittest from main import add_sum class MainTest(unittest.TestCase): def test_do_stuff(self): result = add_sum(5, 10) self.assertEqual(result, 15) if __name__ == '__main__': unittest.main()
上記のコード ブロックに示すように、次の処理が行われます。
test.py が自動的に実行されるため、すべてのメソッドを「test_」で開始することを忘れないでください。 **
**
テストを実行するたびに、すべてのチェックが成功し、コンソールに OK メッセージが表示されることが期待されます。これは、成功したことを意味します。
Ran 1 test in 0.000s OK
開発およびテスト中に、失敗のシナリオが存在する必要があります。これを行うと、すべてのプログラムに脆弱性とバグがあることがわかります。
同じファイルtest.py
で、コードを変更して以下を貼り付けましょう。
# test.py import unittest from main import add_sum class MainTest(unittest.TestCase): # other test def test_do_stuff2(self): result = add_sum("hulu", 5) self.assertEqual(result, 5) if __name__ == '__main__': unittest.main()
このコードを実行した結果は次のようになります。
FAIL: test_do_stuff2 (__main__.MainTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "test.py", line 11, in test_do_stuff3 self.assertEqual(result, 5) AssertionError: ValueError("invalid literal for int() with base 10: 'hulu'") != 5
上記の出力から、エラー コードを読み取り、それに応じてコードを修正することで、次の問題を解決できます。
多くのファイルとさまざまなモジュールが作成されており、デフォルトで単一のファイルを試すのではなく、それらすべてを同時にテストする必要がある場合、このコマンドを使用してすべてのテストを同時に実行できます。
python3 -m unittest
また、テストの詳細を取得するには、フラグ-v (verbose) を指定してコマンドを使用します。これにより、正常なテストと失敗したテストが表示されます。
python3 -m unittest -v
結果は次のようになります。
test_do_stuff (test.MainTest) ... ok test_do_stuff2 (test.MainTest) ... ok ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK
単体テストは、ユーザーがアプリを使用する前に、新しい機能がリリースされるたびに、コードの作成と出荷に関与する QA と開発者によって実行される必要があります。定期的または定期的にテストを行うことは、後付けではなく、アプリが機能的かつ効率的に機能することへの信頼を築くべきです。
この記事では、開発においてテストが不可欠である理由と、単体テストを使用してコードの機能をチェックし、運用環境にデプロイする前にユーザーの標準仕様を満たす方法について概要を説明しました。