我们有一个测试装置,可以修补如下两类。
@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是第三方导入的类检查,用于检查用户拥有的许可证(使用加密货币),并提供三个目的。
通过修补UserLicense,我可以测试isvalid,但是当我尝试修补方法以获取用户角色时,它不会将方法的返回值设置为admin,并且测试失败。
修补该方法的正确方法是什么?
答案 0 :(得分: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
的实例上调用的,而不是类本身。实例是调用类的返回值。因此,您在修补时需要牢记这一点。
取自此answer
类似问题: