我有一个类,其中有一个变量
__init__
和一个方法。该变量存储表示 s3 存储桶名称的字符串值,该方法将使用该名称。
class Manage:
def __init__(self):
self.bucket = 'doc'
def read_file(self):
bucket = self.bucket
...
return file
我正在编写一个测试用例来测试该方法,但问题是我想使用不同的存储桶,所以我想修补该变量的值。
我尝试过的代码
import Manage
def test_manage(monkeypath):
monkeypath.setattr(Manage, 'bucket', 'doc2')
...
上面的代码不起作用,因为存储桶不是类级变量(我猜)。我不知道该怎么改变
正如@gold_cy所建议的,您可以在实例化对象后设置它:
import Manage
def test_manage():
manage = Manage()
manage.bucket = 'doc2'
...
它不起作用,因为您设置了类“管理”的属性,而不是实例。如果您访问 Manage.bucket,您将看到模拟值。 如果您不想安装其他依赖项(如pytest-mock),您可以使用以下解决方法:
monkeypatch.setattr(Manage, "bucket",
property(lambda self: "doc2"))
它创建一个实例方法,然后该方法转向一个属性,您将获得该属性返回的值。有点老套,但有效。