Python/Справочник по библиотеке Python 2.6: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 357:
*При изменении тестовой стратегии, не требуется изменять исходный код.
 
==== Повторное использование старого тестового кода ====
 
У некоторых пользователей может оказаться тестовый код, который они хотели бы выполнять из '''unittest''' без преобразования всех старых тестовых функций в подклассы '''TestCase'''.
По этой причине, в '''unittest''' включен класс '''FunctionTestCase'''. Этот подкласс '''TestCase''' может использоваться для оборачивания уже существующих тестовых функций. Также обеспечивается поддержка функций установки начальных значений и сброса.
Для следующей тестовой функции:
 
<source lang="python">
def testSomething():
something = makeSomething()
assert something.name is not None
# ...
</source>
 
возможно создание экземпляра тестового варианта таким образом:
 
<source lang="python">
testcase = unittest.FunctionTestCase(testSomething)
</source>
 
При необходимости дополнительного запуска методов установки начального состояния и сброса в ходе выполнения тестового варианта, они должны указываться как в примере:
 
<source lang="python">
testcase = unittest.FunctionTestCase(testSomething,
setUp=makeSomethingDB,
tearDown=deleteSomethingDB)
</source>
Для упрощения использования уже существующих тестов, unittest поддерживает тесты поднимающие AssertionError для отображения провала теста. Тем не менее, рекомендуется использовать методы TestCase.fail*() и TestCase.assert*(), поскольку в будущий версиях unittest обработка AssertionError может отличаться.
 
Для упрощения использования уже существующих тестов, '''unittest''' поддерживает тесты поднимающие '''AssertionError''' для отображения провала теста. Тем не менее, рекомендуется использовать методы '''TestCase.fail*()''' и '''TestCase.assert*()''', поскольку в будущийбудущих версиях '''unittest''' обработка '''AssertionError''' может отличаться.
 
Примечание:
Несмотря на то, что с помощью '''FunctionTestCase''' можно быстро преобразовать существующую тестовую базу в систему на базе '''unittest''', применение такого подхода не рекомендуется. Затраты времени на создание соответствующих подклассов '''TestCase''' многократно окупятся многократным упрощением будущего рефакторинга тестов.
 
25.3.4.==== Классы и функции ====
 
class unittest.TestCase([methodName])¶
 
Экземпляры класса TestCase являются минимальными тестовыми единицами во вселенной unittest. Данный класс предназначен быть базовым классом, с заданием конкретных тестов в его подклассах. Класс реализует интерфейс необходимый прогонщику тестов для выполнения теста, и методы, которые тестовый код может использовать для проверки и сообщения о разных видах провалов тестирования.
Каждый экземпляр TestCase выполняет единственный тестовый метод под названием methodName. Как вы возможно помните, выше приводился пример в котором было что-то вроде этого:
def suite():
Строка 393 ⟶ 408 :
 
Класс предоставляет возможность объединения отдельных тестовых вариантов и тестовых наборов. Класс представляет интерфейс необходимый прогонщику тестов для их выполнения как любых других тестовых вариантов. Выполнение экземпляра TestSuite аналогично итерированию по всему набору, с отдельным запуском каждого теста.
Если передается tests, ¬- это должен быть итератор по отдельным тестовым вариантам или другим тестовым наборам которые будут использоваться для начального построения набора. С помощью дополнительных методов класса можно добавлять тестовые варианты и наборы уже после создания экземпляра.
class unittest.TestLoader¶
 
Строка 404 ⟶ 419 :
Экземпляр класса TestLoader предназначенный для совместного использования. Если нет необходимости в изменении класса TestLoader, вместо постоянного создания новых экземпляров может использоваться этот.
class unittest.TextTestRunner([stream[, descriptions[, verbosity]]])¶
Базовая реализация тестового прогонщика, выводящая результаты тестов как стандартные ошибки. У класса есть несколько настраиваемых параметров, но в целом он очень прост. Графические приложения выполняющие тестовые наборы должны предоставлять альтернативные реализации.
unittest.main([module[, defaultTest[, argv[, testRunner[, testLoader]]]]])¶
Командно-строчная программа выполняющая набор тестов, предназначена для реализации простого выполнения тестовых модулей. Простейшим использованием данной функции является включение следующей строки в конец тестового сценария:
Строка 410 ⟶ 425 :
unittest.main()
Аргумент testRunner может быть как классом тестового прогонщика, так и уже созданным экземпляром такого класса.
В некоторых случаях, уже существующие тесты могут быть написаны с помощью модуля doctest. Для таких случаев в модуле есть класс DocTestSuite, автоматически создающий экземпляры unittest.TestSuite из уже существующих тестов на базе doctest.
 
'''Появилось в версии 2.3.'''
 
====25.3.5. Объекты TestCase¶====
Каждый экземпляр TestCase представляет единственный тест a single test, но в каждом отдельном подклассе может задаваться несколько тестов, но с единым тестовым окружением. Окружение создается и обнуляется для каждого тестового варианта.