Python unittest с дорогой установкой

21
задан Community 23 May 2017 в 12:02
поделиться

5 ответов

Если Вы используете Python> = 2.7 (или unittest2 для Python> = 2,4 & < = 2.6), лучший подход был бы для использования

def setUpClass(cls):
    # ...
setUpClass = classmethod(setUpClass)

для выполнения некоторой инициализации однажды для всех тестов, принадлежащих данному классу.

И выполнить очистку, используйте:

@classmethod
def tearDownClass(cls):
    # ...

См. также unittest стандартную библиотеку документация относительно setUpClass и tearDownClass classmethods.

25
ответ дан 29 November 2019 в 20:43
поделиться

В первую очередь, что. Lott сказал. Однако!, Вы не хотите делать это. Существует причина, установка и разрушение обертываются вокруг каждого теста: они помогают сохранить детерминизм тестирования.

Иначе, если некоторый тест помещает систему в плохое состояние, Ваши следующие тесты могут перестать работать. Идеально, каждый из Ваших тестов должен быть независимым.

кроме того, если Вы настаиваете на том, чтобы делать его этот путь, вместо того, чтобы писать вручную сам runTest1 (), сам runTest2 (), Вы могли бы хотеть сделать немного самоанализа, чтобы найти, что методы работают.

4
ответ дан 29 November 2019 в 20:43
поделиться

Инициализация разве уровня пакета не сделает этого для Вас? От нос Wiki :

нос позволяет тестам быть сгруппированными в пакеты тестов. Это позволяет установку уровня пакета; например, если необходимо создать тестовую базу данных или другое приспособление данных для тестов, можно создать его в пакете, устанавливают и удаляют его в разрушении пакета однажды на тестовый прогон, вместо того, чтобы иметь необходимость создать и разъединить его однажды на тестовый модуль или тестовый сценарий.

Для создания установки уровня пакета и методов разрушения определите установку и/или функции разрушения в __init__.py из пакета тестов. Методы установки можно назвать setup, setup_package, setUp, или setUpPackage; разрушение можно назвать teardown, teardown_package, tearDown или tearDownPackage. Выполнение тестов в пакете тестов начинается, как только первый тестовый модуль загружается из пакета тестов.

3
ответ дан 29 November 2019 в 20:43
поделиться

Можно сохранить состояние, если expensiveSetup() выполняется или нет.

__expensiveSetup_has_run = False

class ExpensiveSetupMixin(unittest.TestCase):
    def setUp(self):
        global __expensiveSetup_has_run
        super(ExpensiveSetupMixin, self).setUp()
        if __expensiveSetup_has_run is False:
            expensiveSetup()
            __expensiveSetup_has_run = True

Или некоторое изменение этого. Возможно, проверка с помощью ping-запросов xml-rpc сервер и создает новый, если это не отвечает.

, Но поблочное тестирование путем AFAIK к установка и разрушение на unittest, даже если это дорого.

2
ответ дан 29 November 2019 в 20:43
поделиться

Можно гарантировать setUp, и tearDown выполняются однажды, если у Вас есть только один метод тестирования, runTest. Этот метод может сделать то, что он хочет. Просто убедитесь, что у Вас нет методов с именами, которые запускаются с test.

class MyExpensiveTest( unittest.TestCase ):
    def setUp( self ):
        self.resource = owThatHurts()
    def tearDown( self ):
        self.resource.flush()
        self.resource.finish()
    def runTest( self ):
        self.runTest1()
        self.tunTest2()
    def runTest1( self ):
        self.assertEquals(...)
    def runTest2( self ):
        self.assertEquals(...)

Это автоволшебно не выясняет, что работать. Если Вы добавляете метод тестирования, также необходимо обновить runTest.

-2
ответ дан 29 November 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: