比方说,我有一个简单的灯具,如以下(使用pytest-Django的,但我认为它应该适用于pytest以及):多个副本
@pytest.fixture
def my_thing(request, db):
thing = MyModel.objects.create()
request.addfinalizer(lambda: thing.delete())
return thing
这个伟大的工程时我的测试需要一个MyModel实例。但是如果我需要两个(或三个或四个)呢?我希望每个实例都是独特的,但要以相同的方式进行设置。
我可以复制/粘贴代码并重命名灯具功能,但看起来不够雅致。
同样,我曾尝试:
@pytest.fixture
def my_thing_1(my_thing):
return my_thing
@pytest.fixture
def my_thing_2(my_thing):
return my_thing
然而,这些出现的回归为MyModel的同一个实例。
有没有办法用pytest的内置功能来做我想做的事?或者,我可以将我的灯具的设置/拆卸转换为辅助函数,这样我就不会复制太多的代码。
或者我是否以错误的方式处理这件事?
1)不需要在拉姆达终结良好的通话。 2)我喜欢你的方法。我实际上是使用Factory Boy来创建这些模型,所以我认为我甚至不需要为每个模型创建工厂固定装置。但是我无法继承ModelFactory以递归添加子工厂的终结器,所以我想我会使用您的方法作为停止缺口。谢谢! –
为了将来的参考,我使用finalizer的唯一原因是pytest-django没有在两次测试之间清理数据库,因为它不支持多个数据库(另请参阅https://github.com/pelme/pytest_django/issues/ 76)。对于上面描述的问题类型,我衷心推荐使用带有pytest-django的FactoryBoy。 –