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

Python测试login_imap方法报AssertionError: error not raised问题排查

问题根因
  • 你自定义的login_imap方法内部已经通过try-except捕获了全部imaplib.IMAP4.error类型的异常,异常不会流出方法作用域,测试函数中的assertRaises自然无法捕获到预期异常,因此抛出AssertionError: error not raised。
  • 额外存在逻辑冗余问题:imaplib的login方法登录失败时会直接抛出IMAP4.error异常,不会返回布尔值,你编写的if not connection.login(user, password)判断分支永远不会触发,手动抛异常的代码是无效的。
修复方案

方案一:保留业务侧异常捕获逻辑

如果你的业务要求登录失败只打印日志、不向外抛出异常,可新增标记位来标识登录结果,调整代码如下:

业务方法修改

def login_imap(self, connection, user, password):
    self.login_success = True
    try:
        connection.login(user, password)
    except imaplib.IMAP4.error as error:
        print("Login failed!")
        self.login_success = False
    return connection

测试方法修改

def test_afunction_login_failed(self):
    user = '***'
    password = '***'
    server = '***'
    connection = imaplib.IMAP4_SSL(server)
    mail_obj = MailMessage()
    mail_obj.login_imap(connection, user, password)
    # 校验标记位替代校验异常
    self.assertFalse(mail_obj.login_success)

方案二:移除内部异常捕获逻辑

如果业务侧不需要处理登录异常,需要将异常抛出给上层调用方处理,直接删掉login_imap中的try-except包裹即可,原有测试代码无需修改:

def login_imap(self, connection, user, password):
    connection.login(user, password)
    return connection

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:06:10