paint-brush
Python での単体テストについて に@terieyenike
3,027 測定値
3,027 測定値

Python での単体テストについて

Teri6m2022/09/04
Read on Terminal Reader
Read this story w/o Javascript

長すぎる; 読むには

コードのテストは、ソフトウェア開発ライフサイクルの重要な部分であり、アプリケーションを本番環境にデプロイする前に必ず行う必要があります。単体テストは、コードベースをテストするためにプログラマーが作成する論理プログラムです。テストは、コード内のバグを追跡して見つけるのに役立つため、非常に重要です。この記事では、Python 単体テストを使用して基本的なテストを作成し、テスト中にコードが成功するか失敗するかを確認する方法を説明します。単体テストの主な目的は、すべてのコード関数が期待どおりに動作するかどうかを確認することです。
featured image - Python での単体テストについて
Teri HackerNoon profile picture


コードのテストは、ソフトウェア開発ライフサイクルの首要な方面であり、アプリケーションを本番環境にデプロイする前に必ず行う必需があります。テストは、コード内のバグを追跡して見つけるのに役立つため、十分的に首要です。


テストは、コードを本番環境に出荷する前に、ソース コードの個々のユニットをチェックして最適に動作することを確認する措施です。単体テスト中は、ユーザーのためにソース ファイルを本番環境にデプロイする必要条件がないことに主要してください。


テストは Python に自身のものではないことも覚えておいてください。


この記事では、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 からmain.py add_sum()をインポートします
  • intメソッドを使用して、入力プロンプト値を整数に変換しました
  • 出力を取得するために f-strings (書式設定構文) を使用して合計を出力する値を合計します


単体テストとテスト ケースとは

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()


上記のコード ブロックに示すように、次の処理が行われます。

  • テストする unittest と関数をインポートします (main.py から取得します)。
  • Unittest は、add_sum() 関数のテストを含むクラスを作成することによって機能します。この関数は、unittest が提供するクラス内で unittest.TestCase を継承します。
  • クラスのインスタンスを表す test_do_stuff() で self キーワードを使用して関数を定義します。
  • test_do_stuff() テスト メソッド内で、変数を宣言し、異なる値を持つ 2 つの引数を渡します。
  • 最後の行は unittest assert メソッド assertEqual を使用しており、結果変数から渡した引数が、受け取ると予想される結果と一致することを検証します。
  • 最後に、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


上記の工作效率から、エラー コードを読み取り、それに応じてコードを校核することで、次の問題を解決できます。
  • 特定の行番号でエラーが発生したため、行番号を確認して解決するように指示されています。
  • 次はアサーション エラーです。これは、文字列 'hulu' が有効なリテラルではないことを示す値エラーを示し、main.py ファイルで 2 つの値が int 型であることを認識しています。
  • このステップでは、コードを成功させるために渡す正しい値でコードがテストを正常に実行できるようにするために何を修正すればよいかがわかります。


コードの実行

多くのファイルとさまざまなモジュールが弄成されており、デフォルトで単一のファイルを試すのではなく、それらすべてを同時にテストする需要がある場合、このコマンドを应用してすべてのテストを同時に実行できます。


 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 と開発者によって実行される重要があります。定存的または定存的にテストを行うことは、後付けではなく、アプリが機能的かつ効率的に機能することへの信頼を築くべきです。


この記事では、開発においてテストが不得欠である申请理由と、単体テストを采用してコードの機能をチェックし、運用環境にデプロイする前にユーザーの標準仕様を満たす方式について慨括を説明しました。


もっと詳しく知る


바카라사이트 바카라사이트 온라인바카라