You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用python-telegram-bot将telegram.User加入telegram.Chat以构建测试

测试场景下向模拟Chat对象添加User的实现方案

ptb 库的 Chat 实例本身没有内置 add_user 方法,该操作对应生产环境的 addChatMember 后端API调用,你明确需求为测试场景的话,可以按以下几种方式实现:

  • 方式1:手动为Chat实例追加成员存储属性
    测试场景无需对齐生产API的对象结构,直接给创建好的chat对象加成员列表字段即可满足逻辑校验需求:

    from telegram import User, Chat
    
    # 原有对象创建逻辑
    user = User(id=123, first_name="Foo", is_bot=False)
    chat = Chat(id=0, type="group")
    
    # 追加用户到群组
    if not hasattr(chat, 'members'):
        chat.members = []
    chat.members.append(user)
    

    该方式适合你的业务逻辑直接读取群组成员列表做判断的测试场景。

  • 方式2:Mock成员查询接口的返回值
    如果你的业务逻辑是调用Bot.get_chat_member方法校验用户是否在群内,可以直接Mock该方法的返回,模拟用户已入群的状态,以下是pytest框架的示例:

    import pytest
    from telegram import User, Chat, ChatMember
    
    def test_user_in_group_logic(monkeypatch):
        test_user = User(id=123, first_name="Foo", is_bot=False)
        test_chat = Chat(id=0, type="group")
    
        # 模拟get_chat_member返回结果
        def mock_get_member(chat_id, user_id):
            if chat_id == test_chat.id and user_id == test_user.id:
                return ChatMember(user=test_user, status=ChatMember.MEMBER)
            raise ValueError("User not found")
        
        monkeypatch.setattr("telegram.Bot.get_chat_member", mock_get_member)
        # 后续业务测试逻辑
    
  • 方式3:构造入群事件触发业务逻辑
    如果你的测试目标是验证用户入群后的触发处理逻辑,不需要修改Chat对象本身,直接构造对应的ChatMemberUpdated事件推给你的处理函数即可:

    from telegram import Update, ChatMember, ChatMemberUpdated
    
    test_user = User(id=123, first_name="Foo", is_bot=False)
    test_chat = Chat(id=0, type="group")
    
    # 构造用户入群事件
    join_event = ChatMemberUpdated(
        chat=test_chat,
        from_user=test_user,
        date=1690000000,
        old_chat_member=ChatMember(user=test_user, status=ChatMember.LEFT),
        new_chat_member=ChatMember(user=test_user, status=ChatMember.MEMBER)
    )
    test_update = Update(update_id=1, chat_member=join_event)
    
    # 直接传入你的入群处理回调即可测试
    # await your_join_handler(test_update, context)
    

内容的提问来源于stack exchange,提问作者juju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:24:00