Книга «Изучаем Python»



Pdf көрінісі
бет116/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   112   113   114   115   116   117   118   119   ...   238
Байланысты:
2 5343781172763690906

test_survey.py

import unittest

from survey import AnonymousSurvey

class TestAnonmyousSurvey(unittest.TestCase):



    """Тесты для класса AnonymousSurvey"""

    


    def test_store_single_response(self):

        """Проверяет, что один ответ сохранен правильно."""

        question = "What language did you first learn to speak?"

        my_survey = AnonymousSurvey(question)



        my_survey.store_response('English')

        


        self.assertIn('English', my_survey.responses)

unittest.main()

Программа начинается с импортирования модуля 

unittest

 и тестируемого класса 

AnonymousSurvey

. Тестовый сценарий 

TestAnonymousSurvey

, как и в предыдущих 

случаях, наследует от 

unittest.TestCase

 . Первый тестовый метод проверяет, что 

сохраненный ответ действительно попадает в список ответов опроса. Этому методу 

присваивается хорошее содержательное имя 

test_store_single_response()

 . 

Если тест не проходит, имя метода в выходных данных сбойного теста ясно пока-



зывает, что проблема связана с сохранением отдельного ответа на опрос.

Чтобы протестировать поведение класса, необходимо создать экземпляр класса. 

В точке  создается экземпляр с именем 

my_survey

 для вопроса 

"What


 

language


 

did


 

you


 

first


 

learn


 

to

 



speak?"

, Один ответ (

English

) сохраняется с использова-

нием метода 

store_response()

. Затем программа убеждается в том, что ответ был 

сохранен правильно; для этого она проверяет, что значение 

English

 присутствует 

в списке 

my_survey.responses

 .

При запуске программы 



test_survey .py

 тест проходит успешно:

---------------------------------------------------------------------- 



Ran 1 test in 0.001s 

OK



220    Глава 11  •  Тестирование

Неплохо, но опрос с одним ответом вряд ли можно назвать полезным. Убедимся 

в том, что три ответа сохраняются правильно. Для этого в 

TestAnonymousSurvey

 

добавляется еще один метод:



import unittest

from survey import AnonymousSurvey

class TestAnonymousSurvey(unittest.TestCase):

"""Тесты для класса AnonymousSurvey"""

def test_store_single_response(self):

"""Проверяет, что один ответ сохранен правильно."""

...

        


    def test_store_three_responses(self):

        """Проверяет, что три ответа были сохранены правильно."""

        question = "What language did you first learn to speak?"

        my_survey = AnonymousSurvey(question)

        responses = ['English', 'Spanish', 'Mandarin']



        for response in responses:

            my_survey.store_response(response)

            

        for response in responses:



            self.assertIn(response, my_survey.responses)

unittest.main()

Новому методу присваивается имя 

test_store_three_responses()

. Мы создаем 

объект опроса по аналогии с тем, как это делалось в 

test_store_single_response()

Затем определяется список, содержащий три разных ответа , и для каждого из 



этих ответов вызывается метод 

store_response()

. После того как ответы будут 

сохранены, следующий цикл проверяет, что каждый ответ теперь присутствует 

в 

my_survey.responses



 .

Если снова запустить 

test_survey .py

, оба теста (для одного ответа и для трех ответов) 

проходят успешно:

..

----------------------------------------------------------------------



Ran 2 tests in 0.000s

OK

Все прекрасно работает. Тем не менее тесты выглядят немного однообразно, по-



этому мы воспользуемся еще одной возможностью 

unittest


 для повышения их 

эффективности.

Метод setUp()

В программе 

test_survey .py

 в каждом тестовом методе создавался новый экземпляр 

AnonymousSurvey

, а также новые ответы. Класс 

unittest.TestCase

 содержит метод 




Тестирование класса    221

setUp()


, который позволяет создать эти объекты один раз, а затем использовать их 

в каждом из тестовых методов. Если в класс 

TestCase

 включается метод 

setUp()

Python выполняет метод 



setUp()

 перед запуском каждого метода, имя которого на-

чинается с 

test_


. Все объекты, созданные методом 

setUp()


, становятся доступными 

во всех написанных вами тестовых методах.

Используем 

setUp()


 для создания экземпляра 

AnonymousSurvey

 и набора ответов, 

которые могут использоваться в 

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

        for response in self.responses:

            self.assertIn(response, self.my_survey.responses)

unittest.main()

Метод 

setUp()


 решает две задачи: он создает экземпляр опроса  и список отве-

тов . Каждый из этих атрибутов снабжается префиксом 

self

, поэтому он может 



использоваться где угодно в классе. Это обстоятельство упрощает два тестовых 

метода, потому что им уже не нужно создавать экземпляр опроса или ответы. 

Метод 

test_store_single_response()



 убеждается в том, что первый ответ в 

self.


responses

 — 


self.responses[0]

 — сохранен правильно, а метод 

test_store_single_

response()

 убеждается в том, что правильно были сохранены все три ответа в 

self.


responses

.

При повторном запуске 



test_survey .py

 оба теста по-прежнему проходят. Эти тесты 

будут особенно полезными при расширении 

AnonymousSurvey

 с поддержкой не-

скольких ответов для каждого участника. После внесения изменений вы можете 

повторить тесты и убедиться в том, что изменения не повлияли на возможность 

сохранения отдельного ответа или серии ответов.




222    Глава 11  •  Тестирование

При тестировании классов, написанных вами, метод 

setUp()

 упрощает написание 

тестовых методов. Вы создаете один набор экземпляров и атрибутов в 

setUp()


а затем используете эти экземпляры во всех тестовых методах. Это намного проще 

и удобнее, чем создавать новый набор экземпляров и атрибутов в каждом тестовом 

методе.




Достарыңызбен бөлісу:
1   ...   112   113   114   115   116   117   118   119   ...   238




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет