自動化ユニットテスト-what and why?
4997 ワード
学習サイト:Improve Your Python:Understanding Unit Testing自動化ユニットテストとは何ですか?1.まずテストとは何ですか.
"Testing", in general programming terms, is the practice of writing code (separate from your actual application code) that invokes the code it tests to help determine if there are any errors.
2.テストはコードが正しいことを保証することができず、テストに合格した例を言うしかない.自動化テストと手動テスト:テストコードが自動的にテストを実行する過程は自動化テストであり、手動でプログラムを実行し、インタラクティブに行うテストは手動テストである.4.テスト中にそれらのエラーを検出できますか?文法エラー、論理エラー....5.ユニットテストユニットとは、モジュール全体、クラス、関数、またはそれらの混合などであってもよいコード単位を指し、ユニットが最も重要なのは、テストされていないコードと区別されることを指す.次のコードは質量数を求めて、is_primeある数が質数かどうかを判断するprint_next_primeはパラメータnumberに最も近い次の素数を導出し,2つはそれぞれ2つのユニットである.後者は前者を呼び出し,前者は先にテストOKしてから後者をテストするからである.テストユニットの例の下のコードは、pythonに組み込まれたテストユニットフレームワークを使用したテストケースが1つしかないテストユニットです.unittest.main()が呼び出されたとき、クラスからunittest.TestCaseで継承されたクラスでtestで始まるメソッドが呼び出され、その断言がチェックされます.
このテストケースを実行すると、次のエラーメッセージが表示されます.なぜ自動テストが必要なのですか?1.テストは、コードが一定の条件で正常に動作することを保証します.2.コードの変更が現在の機能を破壊しないことを確認します.特に、コードを再構築する際に役立ちます.3.ユニットテストでは、コードを書くときに異常に注意します.4.良いテストはモジュール化、結合解除コードを必要とし、これらはすべて良好なコード設計である. デバッグとテストを続行エラーレポートから異常が表示され、異常表示が0で除算されたため、除算の範囲を2から開始します.
テストケースの再実行に成功
次に、4が質量数が正しいかどうかをテストし、断言にパラメータを追加し、断言が間違っている場合にこのメッセージを印刷することに注意します.限界テスト2つの一般的な例をテストしました.次に、大きな数、負数、0、1と入力するなど、限界テストの例を考えてみましょう.次に、0のテスト例を書きました.
結果はまた間違っていることを発見して、私達は0,1を排除するべきで、そこで再びis_primeは以下のように変更されました.
負数をもう一度試してみますか?-1から-9までテストしました
しかし、このように私たちが間違っているときは、どの負数が間違っているのか分かりません.私たちは以下のバージョンに変更しました.
これらの印刷エラーの負の数は-1です.
元のコードを再修正には他にもサードパーティ製のテストフレームワークがありますが、unittestで行った拡張だけで、より詳細な情報が印刷されます. より多くの学習test case organization,continuous integration,and test case management
"Testing", in general programming terms, is the practice of writing code (separate from your actual application code) that invokes the code it tests to help determine if there are any errors.
2.テストはコードが正しいことを保証することができず、テストに合格した例を言うしかない.自動化テストと手動テスト:テストコードが自動的にテストを実行する過程は自動化テストであり、手動でプログラムを実行し、インタラクティブに行うテストは手動テストである.4.テスト中にそれらのエラーを検出できますか?文法エラー、論理エラー....5.ユニットテストユニットとは、モジュール全体、クラス、関数、またはそれらの混合などであってもよいコード単位を指し、ユニットが最も重要なのは、テストされていないコードと区別されることを指す.次のコードは質量数を求めて、is_primeある数が質数かどうかを判断するprint_next_primeはパラメータnumberに最も近い次の素数を導出し,2つはそれぞれ2つのユニットである.後者は前者を呼び出し,前者は先にテストOKしてから後者をテストするからである.
def is_prime(number):
"""Return True if *number* is prime."""
for element in range(number):
if number % element == 0:
return False
return True
def print_next_prime(number):
"""Print the closest prime number larger than *number*."""
index = number
while True:
index += 1
if is_prime(index):
print(index)
import unittest
from primes import is_prime
class PrimesTestCase(unittest.TestCase):
"""Tests for `primes.py`."""
def test_is_five_prime(self):
"""Is five successfully determined to be prime?"""
self.assertTrue(is_prime(5))
if __name__ == '__main__':
unittest.main()
このテストケースを実行すると、次のエラーメッセージが表示されます.
Error
Traceback (most recent call last):
File "D:\Python\MyPythonProject\test_primes\test_primes.py", line 9, in test_is_five_prime
self.assertTrue(is_prime(5))
File "D:\Python\MyPythonProject\test_primes\primes.py", line 6, in is_prime
if number % element == 0:
ZeroDivisionError: integer division or modulo by zero
for element in range(2, number):
テストケースの再実行に成功
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
Process finished with exit code 0
次に、4が質量数が正しいかどうかをテストし、断言にパラメータを追加し、断言が間違っている場合にこのメッセージを印刷することに注意します.
def test_is_four_non_prime(self):
"""Is four correctly determined not to be prime?"""
self.assertFalse(is_prime(4), msg='Four is not prime!')
def test_is_zero_not_prime(self):
"""Is zero correctly determined not to be prime?"""
self.assertFalse(is_prime(0))
結果はまた間違っていることを発見して、私達は0,1を排除するべきで、そこで再びis_primeは以下のように変更されました.
def is_prime(number):
if number in (0,1):
return False
"""Return True if *number* is prime."""
for element in range(2,number):
if number % element == 0:
return False
return True
負数をもう一度試してみますか?-1から-9までテストしました
def test_negative_number(self):
"""Is a negative number correctly determined not to be prime?"""
for index in range(-1, -10, -1):
self.assertFalse(is_prime(index))
しかし、このように私たちが間違っているときは、どの負数が間違っているのか分かりません.私たちは以下のバージョンに変更しました.
def test_negative_number(self):
"""Is a negative number correctly determined not to be prime?"""
for index in range(-1, -10, -1):
self.assertFalse(is_prime(index), msg='{} should not be determined to be prime'.format(index))
これらの印刷エラーの負の数は-1です.
Testing started at 22:17 ...
Failure
Traceback (most recent call last):
File "D:\Python\MyPythonProject\test_primes\test_primes.py", line 22, in test_negative_number
self.assertFalse(is_prime(index), msg='{} should not be determined to be prime'.format(index))
AssertionError: True is not false : -1 should not be determined to be prime
元のコードを再修正
def is_prime(number):
if number <= 1:
return False
"""Return True if *number* is prime."""
for element in range(2,number):
if number % element == 0:
return False
return True