2015-11-20 3 views
1

Есть ли способ узнать в Python, если функция вызывается из контекста выполнения unittest или отладки?Python: функция know вызывается из unittest?

В контексте я пытаюсь удалить текст, в котором я использую функции, выполняющие вызов базы данных. Во избежание вызовов базы данных во время проверки этой функции (вызовы DB тестируются отдельно), я пытаюсь информировать функции ввода-вывода DB об их environement и издеваться над ними, когда они вызываются в unittest и регистрируют дополнительные переменные во время отладки запустить.

My current aproach - это переменные среды чтения/записи, но, похоже, это немного перебор, и я думаю, что у Python должен быть лучший механизм для этого.

Edit: Вот пример функции Я пытаюсь UnitTest:

from Database_IO import Database_read 

def some_function(significance_level, time_range) 
    data = Database_read(time_range) 
    significant_data = data > significance_level 
    return significant_data 
+0

Разве вы не можешь вводить издеваться своим объектом? Вы пытаетесь сделать это назад, что может быть признаком того, что ваш код не разработан правильно. –

+5

Вы должны высмеять вызов базы данных в рамках своих тестов/тестирования. Это приведет к тому, что ваш код приложения будет чистым. –

+0

Но как я могу это сделать, если вызов функции DB IO находится внутри функции, которую я готов проверить? – chiffa

ответ

6

На мой взгляд, если вы пишете функцию, чтобы вести себя по-другому при тестировании, вы не действительно испытывая его.

Чтобы проверить функцию, я бы mock.patch() объект базы данных, а затем проверить, правильно ли она используется в вашей функции.

Самое сложное, что вы начинаете использовать библиотеку mock, чтобы найти the correct object to replace.

В вашем примере, если в your_module импорт Database_read объекта из Database_IO модуля, вы можете проверить его с помощью кода, подобного следующему

with mock.patch('your_module.Database_read') as dbread_mock: 
    # prepare the dbread_mock 
    dbread_mock.return_value = 10 
    # execute a test call 
    retval = some_function(3, 'some range') 
    # check the result 
    dbread_mock.assert_called_with('some range') 
+0

Это правильный ответ. – Marcin