Python Pytest-如何确保可变夹具保持不变?
我有一些虚拟装置:Python Pytest-如何确保可变夹具保持不变?,python,pytest,Python,Pytest,我有一些虚拟装置: import pytest @pytest.fixture def base(): return { 'name': 'John', 'surname': 'Snow' } @pytest.fixture def data(base): base['name'] = 'Alfred' return base 还有测试功能: def test_function(data, base): asser
import pytest
@pytest.fixture
def base():
return {
'name': 'John',
'surname': 'Snow'
}
@pytest.fixture
def data(base):
base['name'] = 'Alfred'
return base
还有测试功能:
def test_function(data, base):
assert data == base
测试结果为真。但这是意想不到的结果。您可以猜到,问题是在数据夹具中,名称字段被覆盖
此错误可以通过以下方式解决:
@pytest.fixture
def data(base):
base = copy.deepcopy(base)
base['name'] = 'Alfred'
return base
但是可能有更多的标准方法吗?不,复制
dict
是标准方法。不过,您可以使用dict.copy()
而不是copy.deepcopy()
。不使用副作用来更改装置也是一种很好的做法。未来你会很感激的。记住,未来你知道你住在哪里,而且有点疯狂。