Правильное исправление метода в pytest, когда модуль уже исправлен

У нас есть тестовое приспособление, которое исправляет два класса, как показано ниже.

@pytest.fixture
def license_fixture(mocker):
    
    mocker.patch('api.license_api.UserLicense')
    mocker.patch('api.license_api.UserLicense.userrole', return_value = 'admin') # doesn't work.
    l_mock = mocker.patch('api.license_api.LicenseContent')
    yield l_mock

LicenseContent обслуживает вызовы API для содержимого лицензии и использует UserLicense.

UserLicense — это сторонняя импортированная проверка класса для лицензии, которая есть у пользователя (с использованием криптографии), и служит трем целям.

  1. Все методы шифрования для проверки лицензии.
  2. если у пользователя есть действующая лицензия через метод isvalid()
  3. установить правильную авторизацию пользователя через метод userrole()

С исправлением UserLicense я могу проверить правильность, но когда я пытаюсь исправить метод, чтобы получить роль пользователя, он не устанавливает возвращаемое значение метода для администратора, и тесты завершаются неудачно.

Как правильно пропатчить метод?


person Rohit Srivastava    schedule 28.10.2020    source источник
comment
Какова цель этого: mocker.patch('api.license_api.UserLicense')? Он ничего не делает, кроме как вызывает ошибку.   -  person Amir Afianian    schedule 28.10.2020
comment
Это на самом деле издевается над всем классом.   -  person Rohit Srivastava    schedule 29.10.2020


Ответы (1)


Вы можете исправить return_value фиктивного объекта:

@pytest.fixture
def license_fixture(mocker):
    
    user_license = mocker.patch('api.license_api.UserLicense')
    user_license.return_value.userrole.return_value = 'admin'
    l_mock = mocker.patch('api.license_api.LicenseContent')
    yield l_mock

userrole — это метод экземпляра, поэтому он вызывается для экземпляра UserLicense, а не для самого класса. Экземпляр — это возвращаемое значение при вызове класса. Так что вам нужно иметь это в виду, когда вы патч.

Взято из этого ответа

Похожие вопросы:

person israteneda    schedule 19.06.2021