MailMessage.login_imap(self,connection,user,password)断言错误:未引



我正在尝试测试我的方法login_imap((,但得到了AssertionError:未引发错误。Python 3.9我做错了什么?

def login_imap(self, connection, user, password):
try:
if not connection.login(user, password):
raise imaplib.IMAP4.error("Login failed!")
except imaplib.IMAP4.error as error:
print("Login failed!")
return connection

测试功能:

def test_afunction_throws_exception(self):
user = '***'
password = '***'
server = '***'
connection = imaplib.IMAP4_SSL(server)
with self.assertRaises(imaplib.IMAP4.error) as e:
MailMessage.login_imap(self, connection, user, password)

您使用try...except来处理login_imap函数中引发的异常。而且,您没有在except块内再次引发异常。因此,在测试用例中,没有出现异常。这就是self.assertRaises()失败的原因。

正如assertRaises医生所说:

测试在使用任何位置或关键字参数调用callable时是否引发异常,这些参数也传递给assertRaises()。如果引发异常,测试通过;如果引发另一个异常,测试为错误;如果未引发异常,则测试失败。

如果删除try...except,测试用例就会通过。此外,您可以创建一个模拟连接,而不是真实连接。

例如

main_message.py:

import imaplib

def login_imap(self, connection, user, password):
# try:
if not connection.login(user, password):
raise imaplib.IMAP4.error("Login failed!")
# except imaplib.IMAP4.error as error:
# print("Login failed!")
return connection

test_mail_message.py:

from unittest import TestCase
import unittest
from unittest.mock import Mock
import imaplib
from mail_message import login_imap

class TestMailMessage(TestCase):
def test_login_imap_throws_exception(self):
user = '***'
password = '***'
connection = Mock()
connection.login.return_value = False
with self.assertRaises(imaplib.IMAP4.error) as e:
login_imap(self, connection, user, password)

if __name__ == '__main__':
unittest.main()

测试结果:

.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Name                                              Stmts   Miss  Cover   Missing
-------------------------------------------------------------------------------
src/stackoverflow/70070717/mail_message.py            5      1    80%   10
src/stackoverflow/70070717/test_mail_message.py      15      0   100%
-------------------------------------------------------------------------------
TOTAL 

最新更新