unittest @patch возвращает первый кортеж в списке кортежа

У меня проблема с юниттестом. Исправленный метод возвращает не список кортежей, а только один кортеж:

Мой код

from date import Date
from ditreport import DIT_report
from unittest import TestCase
from unittest.mock import patch, Mock

def mock_get_uuid_messages_with_tmpls():
    result = [('43e89d3a-af91-465f-a2db-3147988d1168',), ('93963bf6-9f75-4ffe-80e6-745307ef0a10',),
            ('88e68d67-8969-4059-9f6c-ff161879eb38',), ('39191cbd-79bb-483a-8df7-04aaf72253f1',),
            ('44a685c4-fb12-4431-ae18-3fb220e4d3e7',), ('3eef8189-7509-4dc1-9d71-c04f1cfc0d88',),
            ('4736beae-aa55-4bb3-b41d-3f94b1b178d1',), ('260db4a6-aab8-4d34-b293-cbf5fe6c7400',),
            ('7b73dfe0-5b8a-4a63-8607-43827eeac4c0',), ('fb51668f-0d2f-4958-911d-07d57a73fe56',)]
    return result

class TestDIT_report(TestCase):
    def setUp(self):
        self.date_start='2020-01-12'
        self.date_end = '2020-02-01'
        self.configfile='config/config.def.xml'
        self.param='covid'
        self.report = DIT_report(self.date_start, self.date_end, self.configfile)

    @patch('ditreport.DIT_report.get_uuid_messages_with_tmpls', side_effect=mock_get_uuid_messages_with_tmpls())
    def test_get_uuid_messages_with_tmpls(self, get_uuid_messages_with_tmpls):
        messages_uuid = get_uuid_messages_with_tmpls()
        self.assertEqual(10,len(messages_uuid))

messages_uuid должен получить список из десяти кортежей, но получить первый кортеж

Запуск юнит-тестов с аргументами python -m unittest TestDIT_report.TestDIT_report.test_get_uuid_messages_with_tmpls в /home/skif/PycharmProjects/reports

начальная конфигурация

Выполнить 1 тест за 0,026 с

СБОЙ (сбои=1)

1 != 10

Ожидаемое :10 Фактическое :1

Трассировка (последний последний вызов): файл /home/skif/pycharm-2020/plugins/python/helpers/pycharm/teamcity/diff_tools.py, строка 32, в _patched_equals old(self, first, second, msg) File /usr /lib/python3.8/unittest/case.py, строка 912, в assertEqual assertion_func(first, second, msg=msg) Файл /usr/lib/python3.8/unittest/case.py, строка 905, в _baseAssertEqual поднять self.failureException (msg) AssertionError: 10! = 1

Во время обработки вышеупомянутого исключения произошло другое исключение:

Трассировка (последний последний вызов): Файл /usr/lib/python3.8/unittest/case.py, строка 60, в файле testPartExecutor yield /usr/lib/python3.8/unittest/case.py, строка 676, в запустить файл self._callTestMethod(testMethod) /usr/lib/python3.8/unittest/case.py, строка 633, в методе _callTestMethod() Файл /usr/lib/python3.8/unittest/mock.py, строка 1325, в исправленном файле return func(*newargs, **newkeywargs) /home/skif/PycharmProjects/reports/TestDIT_report.py, строка 86, в test_get_uuid_messages_with_tmpls self.assertEqual(10,len(messages_uuid))

Почему я получаю эту ошибку? Может я какой параметр пропустил? Но у меня есть аналогичный код, и он возвращает обычный список кортежей.


person Vlad Kn    schedule 02.04.2021    source источник


Ответы (1)


Это простая ошибка.

@patch('ditreport.DIT_report.get_uuid_messages_with_tmpls', 
side_effect=mock_get_uuid_messages_with_tmpls())

должно быть

@patch('ditreport.DIT_report.get_uuid_messages_with_tmpls', 
side_effect=mock_get_uuid_messages_with_tmpls)
person Vlad Kn    schedule 02.04.2021