如何为仅更新全局dict类型变量的函数编写unit_test-Python(pytest)

该函数的单元测试代码,该函数执行验证操作并更新全局字典- result_count = {'test_method':{'Total_tested': 0,'passed': 0,'failed': 0}

下面是函数

def validate_response(testmethod,response,expected_data):

    ra = response.json()

    expected = expected_data['payload']

    if (response.status_code == expected['response_status']) \
         and (result_count[testmethod['folder']]["FAILED"] < 10):    

         ------code logic - checks using jsondiff and re.expressions--

    else:
        missmatch = 'response status code missmatch'
        update_result(testmethod,'status_code',expected_data,missmatch,fail=True)
        result_count[testmethod['folder']]['FAILED'] += 1

需要为上述功能编写测试。检查result_count是否正确更新。

正则表达式库和jsondiff也用于上述函数中。

模拟全局变量并将其用于测试所需的帮助。

在执行下面的测试脚本期间,我遇到了全局变量result_count的关键错误。这意味着代码无法访问result_count ..更新后的关键错误-引发 TypeError:'MagicMock'和'int' 的实例之间不支持' 当前的问题是执行以下行代码时,不会更新result_count。

partner_test.validate_response(test_input_mocker.method,expected_data)

我的单元测试脚本如下

@patch("tests.p_test.result")
@patch("tests.p_test.result_count")
def test_validate_response_pass(result_count_mocker,monkeypatch,result_mocker,test_input_mocker):

# Build data for validate response function

response = Resp(200,{'message': 'pong'})
response_data = response.json()
expected_data = {some_test_data}

# global variable import and initialize result,result_count
from p_test import result,result_count
result_count.update(result_count_mocker.data)
result.update(result_mocker.data)
result_count_mocker.return_value = result_count_mocker.data

def update_result_mocker(*args):
    mock operations here
    return None

monkeypatch.setattr(partner_test,"update_result",update_result_mocker)
p_test.validate_response(test_input_mocker.method,expected_data)
测试功能中的

Resp()是为模拟响应对象而创建的响应类。

wuwuwuwuwuwuuu 回答:如何为仅更新全局dict类型变量的函数编写unit_test-Python(pytest)

可以使用下面的@ patch.dict(dict_name,values)解决问题。

@patch.dict(p_test.result,{dict_values })
@patch.dict(p_test.result_count,{dict_values})
def test_validate_response(monkeypatch,test_input_mocker,result_count_test):
    response = Resp(200,{'message': 'pong'})
    response_data = response.json()

    expected_data = {----your data-----}

    def update_result_mocker(*args):
        # mock_operations


    monkeypatch.setattr(p_test,"update_result",update_result_mocker)
    p_test.validate_response(test_input_mocker.method,response,expected_data)
    print(p_test.result_count)
本文链接:https://www.f2er.com/3167160.html

大家都在问