Python/Справочник по библиотеке Python 2.6: различия между версиями
Содержимое удалено Содержимое добавлено
Tatyr (обсуждение | вклад) |
Tatyr (обсуждение | вклад) |
||
Строка 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*()''', поскольку в
Примечание:
Несмотря на то, что с помощью '''FunctionTestCase''' можно быстро преобразовать существующую тестовую базу в систему на базе '''unittest''', применение такого подхода не рекомендуется. Затраты времени на создание соответствующих подклассов '''TestCase''' многократно окупятся многократным упрощением будущего рефакторинга тестов.
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
'''Появилось в версии 2.3.'''
====25.3.5. Объекты TestCase¶====
Каждый экземпляр TestCase представляет единственный тест a single test, но в каждом отдельном подклассе может задаваться несколько тестов, но с единым тестовым окружением. Окружение создается и обнуляется для каждого тестового варианта.
|