0

我们有一个测试夹具,它可以修补两个类,如下所示。

@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 我可以测试 isvalid,但是当我尝试修补方法以获取用户角色时,它不会将方法的返回值设置为管理员并且测试失败。

修补方法的正确方法是什么?

4

1 回答 1

0

您可以修补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,而不是类本身。实例是调用类的返回值。因此,您在修补时需要牢记这一点。

取自这个答案

类似的问题:

于 2021-06-19T17:02:17.163 回答