使用Google AppEngine在Python中对电子邮件发件人进行单元测试和模拟

CVe*_*tex 5 python google-app-engine unit-testing mocking

我是python和app引擎的新手.

我有这个代码,在一些auth逻辑之后根据请求参数发送一封电子邮件.在我的单元测试中(我正在使用GAEUnit),如何确认发送了具有特定内容的电子邮件? - 即如何使用虚假的电子邮件模拟电子邮件以验证发送是否被调用?

class EmailHandler(webapp.RequestHandler):
 def bad_input(self):
  self.response.set_status(400)
  self.response.headers['Content-Type'] = 'text/plain'
  self.response.out.write("<html><body>bad input </body></html>")

 def get(self):
  to_addr = self.request.get("to")
  subj = self.request.get("subject")
  msg = self.request.get("body")
  if not mail.is_email_valid(to_addr):
    # Return an error message...
    #   self.bad_input()
    pass

  # authenticate here

  message = mail.EmailMessage()
  message.sender = "my.company@gmail.com"
  message.to = to_addr
  message.subject = subj
  message.body = msg
  message.send()
  self.response.headers['Content-Type'] = 'text/plain'
  self.response.out.write("<html><body>success!</body></html>")
Run Code Online (Sandbox Code Playgroud)

单元测试,

import unittest
from webtest import TestApp
from google.appengine.ext import webapp
from email import EmailHandler

class SendingEmails(unittest.TestCase):

  def setUp(self):
    self.application = webapp.WSGIApplication([('/', EmailHandler)], debug=True)

  def test_success(self):
    app = TestApp(self.application)
    response = app.get('http://localhost:8080/send?to=vijay.santhanam@gmail.com&body=blah_blah_blah&subject=mySubject')
    self.assertEqual('200 OK', response.status)
    self.assertTrue('success' in response)
    # somehow, assert email was sent 
Run Code Online (Sandbox Code Playgroud)

gue*_*rda 2

非常简短的介绍提供了PyPI:MiniMock 1.0。这是一个非常小的建立模拟的库。

  1. 将您的模拟注入到应该被模拟的模块中
  2. 定义你的模拟将返回什么
  3. 调用方法
  4. 你的模拟会说,调用了哪个方法。

祝你好运!