模拟具有参数的方法将返回空lis

2024-09-28 01:25:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个从本地ldap获取用户列表的函数。 我想模拟这个函数,以便检查返回的json是否等于预期的json。 如果我不嘲笑它,测试就通过了 如果我模仿它,我会得到一个空列表,测试失败

我的职能:

@app.route('/users', methods=['GET'])
def user_list():
    list_1 = []
    users = ldap.get_group_members('ship_crew')

    for user in users:
        list_1.append(str(user).split(",")[0].split("=")[1])
    return jsonify(list_1)

这个func返回一个字符串列表

我的单元测试:

@patch('dev_maintenance.user_list.ldap.get_group_members')
    def test_content_type(self, get_group_members):

        get_group_members.return_value
        test_client = app.test_client()
        valid_credentials = base64.b64encode(b'hermes:hermes').decode('utf-8')
        response = test_client.get('/users', follow_redirects=True, content_type='application/json',  headers={'Authorization': 'Bearer ' + valid_credentials})
        expected_json = ["Philip J. Fry", "Turanga Leela","Bender Bending Rodr\\xc3\\xadguez"]

        assert response.get_json() == expected_json

错误:

>       assert response.get_json() == expected_json
E       AssertionError: assert [] == ['Philip J. Fry', 'Turanga L...Bending Rodr\\xc3\\xadguez']
E         Right contains more items, first extra item: 'Philip J. Fry'
E         Full diff:
E         - []
E         + ['Philip J. Fry', 'Turanga Leela', 'Bender Bending Rodr\\xc3\\xadguez']

mock使响应为空,不知道为什么。 我需要在某处传递('ship\u crew')参数吗


Tags: testclientjson列表getresponsegroupphilip
1条回答
网友
1楼 · 发布于 2024-09-28 01:25:38

我可以找到解决方案,需要在mock方法中传递一个令牌和一个返回值:

    def test_content_type_json_protected(self, get_group_members):

        with app.test_request_context():
            access_token = create_access_token('hermes')


        get_group_members.return_value = "cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com", \
                                         "cn=Turanga Leela,ou=people,dc=planetexpress,dc=com", \
                                         "cn=Bender Bending Rodr\u00edguez,ou=people,dc=planetexpress,dc=com"
        test_client = app.test_client()
        valid_credentials = {'Authorization': 'Bearer {}'.format(access_token)}
        response = test_client.get('/users', follow_redirects=True, content_type='application/json',headers=valid_credentials)
        expected_json = ["Philip J. Fry", "Turanga Leela", "Bender Bending Rodr\u00edguez"]

        assert response.get_json() == expected_json

相关问题 更多 >

    热门问题