我有两个pytest固定装置,client
和app
。 client
呼叫app
。
测试函数test_register
具有参数client
和app
,因此调用了两个装置。
我的问题是,test_register中使用的app
实例是否总是被client
调用的实例,以及这是否是pytest的一般工作方式(test_register中的断言通过了,所以在这种情况下是正确的)。
换句话说,pytest是为调用固定装置的测试函数中的每个参数生成不相关的实例,还是调用固定装置,并且返回的实例也相互引用?
代码如下:
@pytest.fixture
def app():
app = create_app({
'TESTING': True,
})
yield app
@pytest.fixture
def client(app):
return app.test_client()
def test_register(client, app):
assert client.application is app
答案 0 :(得分:1)
所有装置都有一个范围,隐式范围是function
,但也有class
,module
和session
范围。在每个范围内,只会创建一个灯具实例。
因此,在您的示例中,app
和client
都在使用功能范围。执行test_register
时,它将进入此测试的功能范围并创建夹具实例。因此,test_register
和client
都获得app
的相同实例。
有关所有工作原理的更多详细信息,请参见the docs。