Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 276

Стандартная библиотека содержит не один, а целых два пакета для тестирования

приложений. Начнем с unittest (https://docs.python.org/3/library/unittest.html). Мы на-

пишем модуль, который записывает слова с прописной буквы. Наша первая

версия будет использовать стандартную строковую функцию capitalize(), что, как

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

этот файл

этот файл под

файл под име-

под име-

нем cap.py:

def just_do_it(text):

return text.capitalize()

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

вы хотите получить при определенных входных данных (в нашем примере вы

хотите получить текст, который ввели, записанным с прописной буквы), отправить

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

результат. Ожидаемый результат называется утверждением (assertion), поэтому

в рамках пакета unittest вы проверяете результат с помощью методов, чьи имена

начинаются со слова assert, например assertEqual, показанного в следующем

примере.

Сохраните этот сценарий тестирования под именем test_cap.py:

import unittest

import cap

class TestCap(unittest.TestCase):

def setUp(self):

pass

def tearDown(self):

pass

def test_one_word(self):

text = 'duck'

result = cap.just_do_it(text)

self.assertEqual(result, 'Duck')

def test_multiple_words(self):

text = 'a veritable flock of ducks'

result = cap.just_do_it(text)

self.assertEqual(result, 'A Veritable Flock Of Ducks')

if __name__ == '__main__':

unittest.main()

Перед каждым методом тестирования вызывается метод setUp(), а после каж-

дого из методов тестирования — метод tearDown(). Задачей этих методов является

выделение и освобождение внешних ресурсов, необходимых для тестов, вроде

356

Глава 12. Быть питонщиком

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

случае тесты автономны, и нам даже не нужно определять методы setUp() и tearDown(),

однако создать их пустые версии не повредит. Сердцем наших тестов являются две

функции с именами test_one_word() и test_multiple_words(). Каждая из них запу-

скает определенную нами функцию just_do_it() с разными входными параметрами

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

О’кей, запустим тест. Эта команда вызовет два наших метода тестирования: