Я использую nosetests и в двух отдельных файлах у меня есть два теста. Оба работают нормально, когда запускаются индивидуально, но при запуске вместе, макет из первого теста испортил результаты во втором тесте. Как я могу гарантировать, что все издевательства/исправления будут сброшены после завершения тестовой функции, чтобы я получил чистый тест при каждом запуске?Python - Как разблокировать/сбросить макет во время тестирования?
Если возможно, объяснение с помощью моих тестов было бы особенно ценным. Мой первый тест выглядит следующим образом:
def test_list_all_channel(self):
from notification.models import Channel, list_all_channel_names
channel1 = Mock();
channel2 = Mock();
channel3 = Mock();
channel1.name = "ch1"
channel2.name = "ch2"
channel3.name = "ch3"
channel_list = [channel1, channel2, channel3]
Channel.all = MagicMock()
Channel.all.return_value = channel_list
print Channel
channel_name_list = list_all_channel_names()
self.assertEqual("ch1", channel_name_list[0])
self.assertEqual("ch2", channel_name_list[1])
self.assertEqual("ch3", channel_name_list[2])
И мой второй тест:
def test_can_list_all_channels(self):
add_channel_with_name("channel1")
namelist = list_all_channel_names()
self.assertEqual("channel1", namelist[0])
Но возвращаемое значение из Channel.all() по-прежнему установлен в списке из первой функции таким образом я получаю ` «ch1» не равен «channel1». Какие-либо предложения? Спасибо много!
Что касается функций Mock за пределами патча? Единственный способ сделать это - исправить их для начала? – golmschenk
Да. Я бы рекомендовал использовать встроенную инфраструктуру unittest. Таким образом, вы можете создавать методы setUp и tearDown для создания/уничтожения ваших патчей. –
привет @ jjia6395, кажется, скобки отсутствуют или слишком много? –