Есть ли возможность вызвать метод в mocked функции? - PullRequest
0 голосов
/ 03 октября 2019

У меня есть метод, выполняющий некоторую проверку внутри, и если он успешен, я вызываю один метод, в случае неудачи я вызываю другой. В модульных тестах я издеваюсь над этим методом, поскольку использую сторонний сервис. Есть ли какая-либо опция в модульном тесте для вызова выбранного метода, который находится внутри проверенного метода? Извините, моё описание может быть немного запутанным, но я верю, что пример кода поможет :) У меня есть более одного метода 3rd_party_approves (), поэтому я не могу просто посмеяться над этим, чтобы вернуть True / False

def fun(self):
    if 3rd_party_approves():  # Http request inside that I want to avoid in tests
        self.approve()
    else:
        self.reject()

Я хотел бы иметь возможность вызывать reject () или утверждать методы в модульных тестах без выполнения HTTP-запроса в методе 3rd_party_approves ()

1 Ответ

1 голос
/ 03 октября 2019

Одним из способов было бы создание обертки метода класса для 3rd_party_approves()

class ProductionClass():
...
    def wrapper_for_3rd_party_approves(self):
        return 3rd_party_approves()

и насмешка над ней patch.object

from unittest.mock import patch

with patch.object(ProductionClass, 'wrapper_for_3rd_party_approves', return_value=True):
    ProductionClass().fun() #will allow 3rd_party_approves and call self.approve()

with patch.object(ProductionClass, 'wrapper_for_3rd_party_approves', return_value=False):
    ProductionClass().fun() #will not allow 3rd_party_approves and call self.reject()
...