2015-12-15 3 views
3

Как я могу узнать из текущего теста, если его последний будет запущен? (Python UnitTest/nosetests)Как узнать, является ли текущий тест последним?

У меня есть некоторые конкретные приспособление демонтажа должно быть сделано в самом конце теста, и это было бы намного проще, если бы на тест по основе тестирования я мог бы просто определить:

if last_test: 
    hard_fixture_teardown() 
else: 
    soft_fixture_teardown() 

У меня есть пакетный срыв, который будет работать отлично, но кажется очень грязным, передавая информацию об устройстве обратно на __init__.teardown_package().

ответ

1

Для достижения этой цели вы можете использовать комбинации TestCase.tearDown() и TestCase.tearDownClass(). tearDown() вызывается для каждого тестового метода, а tearDownClass() вызывается после запуска всех тестов в классе.

+0

Спасибо, но что, если вы хотите только запустить «жесткий отрыв» в конце всего прогона, который может содержать множество тестовых классов? – Jele

+1

@Jele: как вы можете догадаться, есть также ['tearDownModule'] (https://docs.python.org/2.7/library/unittest.html#setupmodule-and-teardownmodule). –

+0

eugene y, ура. Я пробовал это раньше и не мог заставить его работать. Где было бы лучшее место для этого? У меня есть существующий модуль установки/разрыва, который работает выше в структуре, что было бы отличным местом для «жесткого срыва», но оно передавало обратно информацию об оборудовании, которая считалась неправильной/беспорядочной. Есть идеи? – Jele

0

Как указано here Единичный тест не предназначен для заказа, модульные испытания в зависимости от заказа либо плохо продуманны, либо просто должны быть объединены в монолитный. (Объединение отдельных функций в одном тесте принятый ответ)

[править после комментария]

Если заказ не имеет значения вы можете сделать это (очень грязный, имо мы по-прежнему заставляют границы того, как блок тесты должны быть использованы)

в каждом тестовом пакете вы положили:

def tearDownModule(): 
    xxx = int(os.getenv('XXX', '0')) + 1 
    if xxx == NUMBER_OF_TEST_PACKAGES: 
     print "hard tear down" 
    else: 
     print "not yet" 
     os.environ['XXX'] = str(xxx) 

с NUMBER_OF_TEST_PACKAGES импортируемых из где-то глобальное.

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

@classmethod 
def setUpClass(cls): 
    print "I'll take a lot of time here" 
+0

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