Python基礎学習day 7|テストコード
6191 ワード
関数またはクラスを記述する場合は、テストを記述することもできます.テストにより,コードが各種入力に対して要求通りに動作することが決定される.プログラマはエラーを犯すため、各プログラマは常にコードをテストし、ユーザーが問題を発見する前にそれらを見つけなければなりません.
zファイル
Python標準ライブラリのモジュール
テストケースの構文を作成するには慣れるまで時間がかかりますが、テストケースを作成した後、関数に対するユニットテストを追加するのは簡単です.関数のテスト・インスタンスを記述するには、モジュール
実行結果:
テストする
中間名という属性が多くなると、エラーメッセージが表示されます.
次の表では、一般的な6つの断言方法について説明します.これらの方法を使用して、返される値が所望の値に等しいかまたは等しくないか、返される値が
方法
用途
assertEqual(a, b)
aを確認!=b
assertTrue(x)col 2 is
xがTrueであることを確認
assertFalse(x)
xがFalseであることを確認
assertIn(item , list )
リスト内のitemの確認
assertNotIn(item , list )
itemがlistにないことを確認
方法
テスト関数
name_function.py
ファイルを新規作成し、追加テストを行います.def get_name(first,last):
""" """
full_name=first+' '+last
return full_name.title()
zファイル
names.py
でname_function.py
を実行from name_function import get_name
print("Enter 'q' at any time to quit.")
while True:
first = fbgbf
if first == 'q':
break
last=gbg
if last == 'q':
break
formatted_name=get_name(first,last)
print("\tNeatly formatted name: " + formatted_name + '.')
ユニットテストとテスト例
Python標準ライブラリのモジュール
unittest
は、コードテストツールを提供します.
関数のある態様を確認するために使用される問題はない.
は、様々な状況における関数の挙動が要求に合致することを確認するユニットテストのセットである.良好なテスト例は、これらのすべての状況に対するテストを含む、関数が受信する可能性のある様々な入力を考慮している.
の例は、様々な可能な関数の使用方法をカバーするユニットテストのセットを含む.大規模なプロジェクトでは、フルオーバーライドを実現するのは難しいかもしれません.通常,最初はコードの重要な動作に対してテストを記述すればよいが,プロジェクトが広く使用される場合には全オーバーライドを考慮する.合格できるテスト
テストケースの構文を作成するには慣れるまで時間がかかりますが、テストケースを作成した後、関数に対するユニットテストを追加するのは簡単です.関数のテスト・インスタンスを記述するには、モジュール
unittest
およびテストする関数をインポートしてから、unittest.TestCase
を継承するクラスを作成し、関数の動作の異なる態様をテストする一連の方法を記述します.次に、関数get_formatted_name()
が名前と姓を指定するときに正しく動作するかどうかを検査する1つの方法のみを含むテスト例を示します.import unittest
from name_function import get_name
class NamesTestCase(unittest.TestCase): # get_nname()
""" name_function.py"""
def test_first_last_name(self):
""" Janis Joplin ?"""
formatted_name = get_formatted_name('janis', 'joplin')
self.assertEqual(formatted_name, 'Janis Joplin')
unittest.main()
実行結果:
. #
----------------------------------------------------------------------
Ran 1 test in 0.000s #
OK #
合格できないテスト
テストする
name_function.py
ファイルの変更def get_name(first,middle,last):
""" """
full_name = first + ' ' + middle + ' ' + last
return full_name.title()
中間名という属性が多くなると、エラーメッセージが表示されます.
E
======================================================================
ERROR: test_first_last_name (__main__.NamesTestCase)
Janis Joplin ?
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/jiemo/Documents/Python/day0/test_name.py", line 8, in test_first_last_name
formatted_name = get_name('janis', 'joplin')
TypeError: get_name() missing 1 required positional argument: 'last'
----------------------------------------------------------------------
Ran 1 test in 0.001s
テストクラス
次の表では、一般的な6つの断言方法について説明します.これらの方法を使用して、返される値が所望の値に等しいかまたは等しくないか、返される値が
True
またはFalse
であるか、返される値がリストにあるか、リストにないかを確認することができる.これらのメソッドは、unittest.TestCase
を継承するクラスでのみ使用できます.次に、クラスをテストするときに使用する方法を見てみましょう.unittest Moduleでの断言方法
方法
用途
assertEqual(a, b)
aを確認!=b
assertTrue(x)col 2 is
xがTrueであることを確認
assertFalse(x)
xがFalseであることを確認
assertIn(item , list )
リスト内のitemの確認
assertNotIn(item , list )
itemがlistにないことを確認
テストするクラス
class AnonymousSurvey():
""" """
def __int__(self,question):
super(AnonymousSurvey, self).__init__()
self.question = question
self.responses=[]
def show_question(self):
""" """
print(question)
def store_response(self, new_response):
""" """
self.responses.append(new_response)
def show_results(self):
""" """
print("Survey results:")
for response in responses:
print('- ' + response)
from survey import AnonymousSurvey
# , AnonymousSurvey
question = "What language did you first learn to speak?"
my_survey = AnonymousSurvey(question)
#
my_survey.show_question()
print("Enter 'q' at any time to quit.
")
while True:
response = input("Language: ")
if response == 'q':
break
my_survey.store_response(response)
#
print("
Thank you to everyone who participated in the survey!")
my_survey.show_results()
AnonymousSurvey
クラスは、簡単な匿名調査に使用することができる.メソッドsetUp()
setUp()
を使用して、方法test_store_single_response()
およびtest_store_three_responses()
で使用される調査対象および回答のセットを作成します.import unittest
from survey import AnonymousSurvey
class TestAnonymousSurvey(unittest.TestCase):
""" AnonymousSurvey """
def setUp(self):
""" , """
question = "What language did you first learn to speak?"
self.my_survey = AnonymousSurvey(question)
self.responses = ['English', 'Spanish', 'Mandarin']
def test_store_single_response(self):
""" """
self.my_survey.store_response(self.responses[0])
self.assertIn(self.responses[0], self.my_survey.responses)
def test_store_three_responses(self):
""" """
for response in self.responses:
self.my_survey.store_response(responses)
for response in self.responses:
self.assertIn(response, self.my_survey.responses)
unittest.main()
方法
setUp()
は2つのことをした:調査対象self.my_survey
を作成する;回答リストself.responses
を作成します.独自に作成されたクラスをテストする場合、メソッドsetUp()
は、setUp()
メソッドで一連のインスタンスを作成し、プロパティを設定し、テストメソッドで直接使用することができます.これは、各テストメソッドでインスタンスを作成し、プロパティを設定するよりも簡単です.