对于我正在测试的应用程序,我想创建一个 autouse=True
猴子修补的固定装置smtplib.SMTP.connect
如果他们尝试意外发送电子邮件,则测试失败。
但是,在我确实希望测试发送电子邮件的情况下,我想使用不同的 fixture 来记录这些电子邮件(最有可能通过使用 smtpserver
中的 pytest-localserver
fixture 并猴子修补 connect
方法来使用该装置返回的主机/端口)
当然,只有当 autouse fixture 在另一个 fixture(作为 funcarg 加载)之前执行时才能工作。是否有任何执行固定装置的特定顺序和/或是否有保证执行顺序的方法?
最佳答案
控制 fixture 执行顺序的最简单方法是只在后面的 fixture 中请求前一个 fixture。所以要确保 b
在 a
之前运行:
@pytest.fixture(autouse=True, scope="function")
def b():
pass
@pytest.fixture(scope="function")
def a(b):
pass
有关一般 fixture 解析顺序的详细信息,请参阅 Maxim's excellent answer below或者看看 the documentation .
关于python - pytest fixtures 以什么顺序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25660064/