gpt4 book ai didi

python - pytest fixture 的多个副本

转载 作者:IT老高 更新时间:2023-10-28 21:12:03 25 4
gpt4 key购买 nike

假设我有一个像下面这样的简单 fixture (使用 pytest-django,但它也适用于 pytest):

@pytest.fixture
def my_thing(request, db):
thing = MyModel.objects.create()
request.addfinalizer(lambda: thing.delete())
return thing

当我的测试需要 MyModel 的单个实例时,这非常有用。但是如果我需要两个(或三个或四个)呢?我希望每个实例都是不同的,但要以相同的方式设置。

我可以复制/粘贴代码并重命名fixture函数,但这似乎不太优雅。

同样,我也试过:

@pytest.fixture
def my_thing_1(my_thing):
return my_thing

@pytest.fixture
def my_thing_2(my_thing):
return my_thing

但是,它们中的每一个似乎都返回了相同的 MyModel 实例。

有没有办法使用 pytest 的内置功能来做我想做的事?或者,我可以将我的 fixture 的设置/拆卸移到辅助函数中,这样我就不会复制太多代码。

还是说我做错了事?

最佳答案

我的方法可能是创建一个可以生成对象的 fixture :

@pytest.fixture
def thing(request, db):
class ThingFactory(object):
def get(self):
thing = MyModel.objects.create()
request.addfinalizer(thing.delete)
return thing
return ThingFactory()

def test_thing(thing):
thing1 = thing.get()
thing2 = thing.get()

显然你可以让 .get() 接受一个参数等。

(PS:另请注意,终结器中不需要 lambda)

关于python - pytest fixture 的多个副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21583833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com