没有拆卸代码的(默认)功能范围夹具的优点是什么?为什么不在测试开始时调用函数?
例如,写作的好处是什么:
@pytest.fixture
def smtp():
return smtplib.SMTP("smtp.gmail.com")
def test_ehlo(smtp):
response, msg = smtp.ehlo()
# ...
而不仅仅是:
def create_smtp():
return smtplib.SMTP("smtp.gmail.com")
def test_ehlo():
smtp = create_smtp()
response, msg = smtp.ehlo()
# ...
我理解为什么在我们需要拆卸代码时灯具很有用。我也理解为什么具有除功能之外的范围的灯具是有用的:我们可能想要重复使用相同的"外部"多个测试中的对象(以节省创建它所需的时间;或者甚至可能保持其状态 - 尽管这似乎相当危险,因为这会在单独的测试之间产生难以看见的耦合)。
答案 0 :(得分:3)
当我开始使用它时,我遇到了类似的问题。以下是我的经历:
答案 1 :(得分:2)
没有的(默认)功能范围夹具的优点是什么 拆机代码?为什么不在开头调用函数 测试
节省垂直空间。
考虑这样的事情,每次测试你有多个夹具:
import pytest
@pytest.fixture
def value1():
return 1
@pytest.fixture
def value2():
return 2
@pytest.fixture
def value3():
return 3
def test_values(value1, value2, value3):
assert value1 == 1
assert value2 == 2
assert value3 == 3
如果我们按照你的方式做到这一点:
def test_values():
v1 = value1()
v2 = value2()
v3 = value3()
assert v1 == 1
assert v2 == 2
assert v3 == 3
这是三行额外的代码。没什么大不了的,但如果你有10个需要value1
,value2
和value3
的测试呢?现在你有30个额外的垂直空间线,基本上没有理由。
显然,我们的两个示例都过于简化了(我可以完成调用和assert
内联),但我认为直接看看它如何对实际代码产生影响。
答案 2 :(得分:1)
我认为功能范围固定装置最重要的优点之一是一致性。如果你的所有灯具(无论它们的范围或拆卸代码)都以完全相同的方式使用,它就更具可读性和逻辑性。
此外,如果在将来某个时候您决定更改此灯具的范围或添加一些拆卸代码,那么您将不需要更改任何测试用例,只需更改灯具的代码