Как издеваться над сторонним методом stati c - PullRequest
2 голосов
/ 21 марта 2020

Чтобы упростить мой вопрос, рассмотрим следующий код:
Как написать тест для функции foo1 с исправлениями \ насмешкой над частью S3Downloader.read_file?

Я предпочитаю, чтобы вы мне показали пример использования pytest-mock или даже unitest.mock

from sagemaker.s3 import S3Downloader

class Fooer(object):
    @staticmethod
    def foo1(s3_location):       
        s3_content = S3Downloader.read_file(s3_location)
        return Fooer.foo2(s3_content)


    @staticmethod
    def foo2(s3_content):
       return s3_content +"_end"

1 Ответ

4 голосов
/ 21 марта 2020

Примечание: Предполагая, что упомянутый вами фрагмент находится в файле fooer.py

Пожалуйста, найдите следующий пример теста для тестирования foo1

import fooer
import mock

class TestFooer(object):

    @mock.patch('fooer.S3Downloader', autospec=True)
    def test_foo1(self, mock_s3_downloader):
        """
        Verify foo1 method that it should return the content downloaded from S3 bucket with _end prefix
        """
        mock_s3_downloader.read_file.return_value = "s3_content"
        foo1_result = fooer.Fooer.foo1("s3_location")
        assert foo1_result == "s3_content_end", "Content was not returned with _end prefix"

В фрагмент я пропатчил класс fooer.Session. Чтобы исправить класс, нам нужно предоставить модуль и свойство этого модуля. Макет объекта передается в тестовый набор с помощью аргумента. Вы можете использовать этот объект для изменения поведения. В этом случае я обновил возвращаемое значение S3Downloader.

autospec=True в исправлении проверяет, что все спецификации исправленного класса соблюдаются должным образом. В основном он проверяет, что объект патча был предоставлен с правильными аргументами.

ссылка: https://medium.com/@yeraydiazdiaz / what-the-mock-cheatsheet-mocking-in- python -6a71db997832

Очень хороший блог о тестировании с макетом: https://www.toptal.com/python/an-introduction-to-mocking-in-python

...