Python基礎学習day 7|テストコード

6191 ワード

関数またはクラスを記述する場合は、テストを記述することもできます.テストにより,コードが各種入力に対して要求通りに動作することが決定される.プログラマはエラーを犯すため、各プログラマは常にコードをテストし、ユーザーが問題を発見する前にそれらを見つけなければなりません.

テスト関数

name_function.pyファイルを新規作成し、追加テストを行います.
def get_name(first,last):
    """ """
    full_name=first+' '+last
    return full_name.title()

zファイルnames.pyname_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()メソッドで一連のインスタンスを作成し、プロパティを設定し、テストメソッドで直接使用することができます.これは、各テストメソッドでインスタンスを作成し、プロパティを設定するよりも簡単です.