我创建了使用Gmail的Mail客户端。
当我在开发环境中工作时,我无法访问互联网。
所以,我创建了Mock对象,而不是将邮件发送到谷歌,将其写入本地文件夹。
它看起来像:
Class GmailSender(object):
def Send(title,body....):
""" Send mail to gmail """
Class MockGmailSender(object):
def Send(title,body....):
""" Write to file """
现在我的所有代码都是:
Gmail = GmailSender()
if Simulator:
Gmail = MockGmailSender()
这很糟糕。
我在模块之后搜索,让我在加载服务时用我的Mock对象替换GmailSender对象,如:
if Simulator:
replace(GmailSender,MockGmailSender)
目前,当我启动GmailSender时,实例将是MockGmailSender。
我很乐意帮助你
谢谢,
Nadav。
答案 0 :(得分:1)
对于模拟类,可以使用mock.patch:
%python ./gmail.py
以0.033秒进行2次测试
import unittest
class GmailSender(object):
def __init__(self):
pass
def Send(self, title, body):
""" Send mail to gmail """
content = "{0} with {1}".format(title, body)
return content
class testGmail(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_send(self):
gs = GmailSender()
self.assertEqual("A with B", gs.Send("A", "B"))
pass
def test_mock_send(self):
from mock import patch
with patch('__main__.GmailSender') as gsmock:
gs = GmailSender()
gsmock.return_value.Send.return_value = 'B with A'
self.assertEqual("B with A", gs.Send("A", "B"))
if __name__ == '__main__':
unittest.main()