首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python补丁ldap3搜索响应

Python补丁ldap3搜索响应
EN

Stack Overflow用户
提问于 2021-01-06 01:56:42
回答 1查看 887关注 0票数 0

我试图模拟以下函数,但不知道如何模拟连接响应:

代码语言:javascript
复制
def get_user_res(user, pass):
    res = None
    server = Server('my_server')
    connnection = Connection(server, user, pass, strategy=SAFE_SYNC, auto_bind=True)
    if connection.bind():
        connection.search(search_base, search_filter, SUBTREE)
        res = connection.response
        connection.unbind()
    return res
代码语言:javascript
复制
@mock.patch("ldap3.Server")
@mock.patch("ldap3.Connection.response")
def test_get_user_res(mock_connection, mock_server):
    mock_connection.return_value = ""
    retrived_res = get_user_res("fake_user","fake_password")
    expected_res = ""
    assert retrived_res == expected_res
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-06 02:38:27

根本的问题是你在嘲笑错误的东西。如果您有一个名为ldapclient.py的文件,其中包含了您的get_user_rest方法,如以下所示(请注意,我已经重写了一些东西,以便在编写测试时简化我们的生活):

代码语言:javascript
复制
import ldap3

server = ldap3.Server('my_server')
search_base = 'dc=example, dc=com'


def get_user_res(user, password, search_filter=None):
    res = None

    connection = ldap3.Connection(
        server, user, password,
        client_strategy=ldap3.SAFE_SYNC, auto_bind=True)

    if connection.bind():
        res = connection.search(search_base, search_filter, ldap3.SUBTREE)
        connection.unbind()

    return res

然后您需要模拟的是ldap3.Connection类。但是,由于您的测试位于不同的模块中,因此需要调用@mock.patch('ldapclient.ldap3.Connection),假设您的测试定义如下:

代码语言:javascript
复制
import ldap3

from unittest import mock

import ldapclient


@mock.patch("ldapclient.ldap3.Connection")
def test_get_user_res(mock_connection_class):
    mock_connection = mock.Mock()
    mock_connection.search.return_value = 'fake_return'
    mock_connection_class.return_value = mock_connection

    retrived_res = ldapclient.get_user_res("fake_user", "fake_password")
    expected_res = "fake_return"
    assert retrived_res == expected_res

这里有几件事要注意:

正如前面提到的,由于我们有ldapclient.ldap3.Connection.

  • We,所以我们需要模拟connection = ldap3.Connection(...)

  • We使ldap3.Connection类返回一个新的mock.Mock对象,因为我们希望能够模拟调用connection = ldap3.Connection(...)

  • We时返回的对象上的方法,使search方法返回一个假值,以确保它按预期的方式被调用。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65589162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档