我有几个固定装置,可以进行一些相当昂贵的初始化。这些装置中的一些可以采用参数,从而稍微改变其行为。
由于这些代码非常昂贵,我想在每个测试类中对它们进行一次初始化。但是,它不会在下一个参数置换时销毁并重新启动灯具。
参见此示例:https://gist.github.com/vhdirk/3d7bd632c8433eaaa481555a149168c2
当为参数'foo'和'bar'重新创建StuffStub
时,我希望DBStub
是不同的实例。
我误会了吗?这是一个错误吗?
这不是错误。 [夹具之间没有关系,所以其中一个不会因为另一个被归因于参数化而再次被调用。
在您的情况下,db
被调用了两次,因为它使用的db_factory
具有2 params
。另一方面,stuff
固定装置仅被调用一次,因为stuff_factory
在params
中只有一个项目。
如果stuff
也包括db_factory
而没有实际使用其输出(db_factory
的调用不会超过两次),您应该得到预期的结果:
@pytest.fixture(scope="class")
def stuff(stuff_factory, db_factory):
return stuff_factory()