第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正確的mock.patch smtplib.SMTP方法

正確的mock.patch smtplib.SMTP方法

九州編程 2023-07-18 17:48:23
smtplib.SMTP.sendmail嘗試在單元測試中模擬.修補調用。該sendmail方法似乎已成功模擬,我們可以將其查詢?yōu)镸agicMock,但sendmail 模擬的called和called_args屬性未正確更新??磥砦覜]有正確應用補丁。這是我正在嘗試的一個簡化示例:import unittest.mockwith unittest.mock.patch('smtplib.SMTP', autospec=True) as mock:    import smtplib    smtp = smtplib.SMTP('localhost')    smtp.sendmail('me', 'me', 'hello world\n')    mock.assert_called()           # <--- this succeeds    mock.sendmail.assert_called()  # <--- this fails此示例生成:AssertionError: Expected 'sendmail' to have been called.如果我將補丁更改為smtp.SMTP.sendmail;例如:with unittest.mock.patch('smtplib.SMTP.sendmail.', autospec=True) as mock:    ...在這種情況下,我可以成功訪問模擬的called_args和屬性,但由于允許進行初始化,因此與主機建立了實際的 smtp 會話。這是單元測試,我不希望發(fā)生實際的網(wǎng)絡。calledsmtplib.SMTP
查看完整描述

2 回答

?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

我今天遇到了同樣的問題,忘記了我正在使用上下文,所以只需更改


mock.sendmail.assert_called()


mock.return_value.__enter__.return_value.sendmail.assert_called()

這看起來很混亂,但這是我的例子:


msg = EmailMessage()

msg['From'] = 'no@no.com'

msg['To'] = 'no@no.com'

msg['Subject'] = 'subject'

msg.set_content('content');


with patch('smtplib.SMTP', autospec=True) as mock_smtp:

    misc.send_email(msg)


    mock_smtp.assert_called()


    context = mock_smtp.return_value.__enter__.return_value

    context.ehlo.assert_called()

    context.starttls.assert_called()

    context.login.assert_called()

    context.send_message.assert_called_with(msg)


查看完整回答
反對 回復 2023-07-18
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

我將 Dustymugs 的帖子標記為答案,但我發(fā)現(xiàn)了另一種技術來對依賴于模擬 method_calls 的調用進行單元測試。

import unittest.mock

with unittest.mock.patch('smtplib.SMTP', autospec=True) as mock:

? ? import smtplib

? ? smtp = smtplib.SMTP('localhost')

? ? smtp.sendmail('me', 'you', 'hello world\n')


? ? # Validate sendmail() was called

? ? name, args, kwargs = smtpmock.method_calls.pop(0)

? ? self.assertEqual(name, '().sendmail')

? ? self.assertEqual({}, kwargs)


? ? # Validate the sendmail() parameters

? ? from_, to_, body_ = args

? ? self.assertEqual('me', from_)

? ? self.assertEqual(['you'], to_)

? ? self.assertIn('hello world', body_)


查看完整回答
反對 回復 2023-07-18
  • 2 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號