Правильный способ издеваться над декорированным способом в Python - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть класс с .upload методом. Этот метод упакован с использованием декоратора:

@retry(tries=3)
def upload(self, xml_file: BytesIO):
    self.client.upload(self._compress(xml_file))

Мне нужно проверить, запускается ли он 3 раза, если возникает какое-то исключение. Мой тест выглядит так:

@mock.patch("api.exporter.jumbo_uploader.JumboZipUploader.upload")
def test_upload_xml_fail(self, mock_upload):
    """Check if decorator called the compress function 3 times"""

    generator = BrandBankXMLGenerator()
    file = generator.generate()

    uploader = JumboZipUploader()
    uploader.upload = retry(mock_upload)
    mock_upload.side_effect = Exception("Any exception")
    uploader.upload(file)

    self.assertEqual(mock_upload.call_count, 3)

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

Я сделал этот трюк, но код завершился ошибкой с AssertionError: 0! = 3.

Итак, как правильно здесь обернуть декорированный метод правильно?

...