Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pytest-如何确保可变夹具保持不变?_Python_Pytest - Fatal编程技术网

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()
。不使用副作用来更改装置也是一种很好的做法。未来你会很感激的。记住,未来你知道你住在哪里,而且有点疯狂。