我有几个固定装置可以进行一些相当昂贵的初始化。其中的一些灯具可以接受参数,从而略微改变其行为。
由于它们非常昂贵,因此我想在每个测试类中对其进行一次初始化。但是,它不会在下一个参数置换时破坏并重新启动固定装置。
请参见以下示例:https://gist.github.com/vhdirk/3d7bd632c8433eaaa481555a149168c2
当为参数'foo'和'bar'重新创建StuffStub
时,我希望DBStub
是一个不同的实例。
我误会了吗?这是错误吗?
我有几个固定装置可以进行一些相当昂贵的初始化。其中的一些灯具可以接受参数,从而略微改变其行为。
由于它们非常昂贵,因此我想在每个测试类中对其进行一次初始化。但是,它不会在下一个参数置换时破坏并重新启动固定装置。
请参见以下示例:https://gist.github.com/vhdirk/3d7bd632c8433eaaa481555a149168c2
当为参数'foo'和'bar'重新创建StuffStub
时,我希望DBStub
是一个不同的实例。
我误会了吗?这是错误吗?
这不是错误。 这些灯具之间没有关系,因此其中一个灯具不会因为另一个params
而被召回。
在您的情况下,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()