Python как я могу исправить метод классов, чтобы получить доступ к переменной cls

#python-3.x #mocking #patch

Вопрос:

Я заинтересован в исправлении метода класса a под названием _validate в классе схемы и в замененном fn, используя значение cls и другие аргументы.

Для контекста ArrayHoldingAnyType наследуется от Schema, и _validate вызывается при создании экземпляра. Когда я пытаюсь сделать это с помощью приведенного ниже кода, значение для cls не является классом. Как исправить переменную cls?

     def test_validate_called_n_times(self):
        def replacement_validate(cls, *args):
            # code which will return the correct values

        with patch.object(Schema, '_validate', new=replacement_validate) as mock_validate:
            path_to_schemas = ArrayHoldingAnyType(['a'])
            # I will check that the mock was called a certain number of times here with specific inputs

 

Ответ №1:

Таким образом, проблема здесь заключалась в том, что декоратор метода классов отсутствовал в replacement_validate. Это исправляет ситуацию:

     def test_validate_called_n_times(self):
        @classmethod
        def replacement_validate(cls, *args):
            # code which will return the correct values

        with patch.object(Schema, '_validate', new=replacement_validate) as mock_validate:
            path_to_schemas = ArrayHoldingAnyType(['a'])
            # I will check that the mock was called a certain number of times here with specific inputs
 

Комментарии:

1. Хм, теперь возникает проблема, при которой mock_validate.call_args_list не может быть проверен при использовании new=replacement_validate или side_effect=replacement_validate