2015-07-16 3 views
0

Я новичок в python. Я читаю unittest docs. В документации о методе tearDown() я нашел следующие строки:teardown method in unittest python

«Это вызвано, даже если метод проверки вызвал исключение, поэтому для реализации в подклассах может потребоваться особенно тщательная проверка внутреннего состояния».

Что передает это утверждение? Можете ли вы дать мне понять меня с помощью хорошего примера, где внутреннее утверждение может создать хаос?

Заранее спасибо.

EDIT:

Я получил ответы на некоторые вопросы, но они довольно просты. Мне нужны некоторые примеры, в которых задействовано какое-то государство, например тесты с использованием базы данных и т. Д.

ответ

0

С OP:

«Это называется даже если метод тестирования вызвал исключение, поэтому для реализации в подклассах, возможно, потребуется особенно тщательная проверка внутреннего состояния ».

Первыми вещами, которые это передает, является то, что вы можете быть уверены, что teardown называется тем, что происходит в ваших методах тестирования. Следовательно, это означает, что вы должны не иметь какой-либо код разрыва в вашем методе тестирования, вы должны переместить его в метод teardown.

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

Примером может быть то, что вы проверяете код, который включает создание таблиц в базе данных. Если у вас есть исключение, возможно, не все таблицы созданы, поэтому teardown должен убедиться, что он не пытается удалить несуществующие таблицы. Тем не менее, лучший способ может быть для setup, чтобы начать транзакцию и teardown, чтобы отменить транзакцию.

+0

Это более подходящий ответ. –

0

Это означает, что метод tearDown() выполняется независимо от того, прошел ли ваш тестовый метод или не прошел (вызвал исключение).

Например:

def tearDown(): 
    print 'In teardown: cleaning up' 

def test_Example1(): 
    try: 
     result = 2/0 
    except ZeroDivisionError as e: 
     raise e 

def test_Example2(): 
    try: 
     result = 2/2 
    except ZeroDivisionError as e: 
     raise e 

Когда test_Example1 работает, он поднимет ZeroDivisionError, а затем выполнить tearDown(), печать In teardown: cleaning up на консоль. test_Example2 будет не исключение ZeroDivisionError, но tearDown() все равно будет выполнено независимо.

Редактировать Я не совсем знаком с модулями базы данных Python, но это должно быть достаточно, чтобы получить мяч прокатки ...

def tearDown(): 
    print 'In teardown: cleaning up' 

def test_do_database_task(): 
    db = sqlite3.connect(DB_NAME)   
    try: 
     # code related to task at hand 
    except: 
     raise Exception("Error in connection!") 
    finally: 
     closeDb(db) 
+0

Можете ли вы привести несколько примеров, связанных с базой данных, в которой задействовано некоторое внутреннее тестовое состояние? –

+0

Несомненно. См. Править. – ILostMySpoon

+0

Я мог бы поддержать ваш ответ, но в настоящее время у меня нет достаточного количества баллов. –