Pytest类作用域参数化

问题描述 投票:1回答:1

我有几个固定装置,可以进行一些相当昂贵的初始化。这些装置中的一些可以采用参数,从而稍微改变其行为。

由于这些代码非常昂贵,我想在每个测试类中对它们进行一次初始化。但是,它不会在下一个参数置换时销毁并重新启动灯具。

参见此示例:https://gist.github.com/vhdirk/3d7bd632c8433eaaa481555a149168c2

当为参数'foo'和'bar'重新创建StuffStub时,我希望DBStub是不同的实例。

我误会了吗?这是一个错误吗?

python pytest fixtures
1个回答
0
投票

这不是错误。 [夹具之间没有关系,所以其中一个不会因为另一个被归因于参数化而再次被调用。

在您的情况下,db被调用了两次,因为它使用的db_factory具有2 params。另一方面,stuff固定装置仅被调用一次,因为stuff_factoryparams中只有一个项目。

如果stuff也包括db_factory而没有实际使用其输出(db_factory的调用不会超过两次),您应该得到预期的结果:

@pytest.fixture(scope="class")
def stuff(stuff_factory, db_factory):
    return stuff_factory()
© www.soinside.com 2019 - 2024. All rights reserved.