0

我创建了与 Gmail 一起使用的邮件客户端。

当我在我的开发环境中工作时,我无法访问互联网。

因此,我创建了 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。

我很想得到你的帮助

谢谢,

纳达夫。

4

1 回答 1

1

要模拟一个类,您可以使用 mock.patch:

%蟒蛇./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()
于 2013-09-05T12:54:53.267 回答