Unit testing und mocking E-Mail-Absender in Python mit Google AppEngine
Ich bin ein Neuling auf python und Google app engine.
Habe ich diesen code, der sendet eine E-Mail basierend auf request-params-nach einigen auth Logik. in meinen Unit-tests (ich bin mit GAEUnit), wie bestätige ich eine E-Mail mit bestimmten Inhalt gesendet wurden? - also wie kann ich verspotte die emailer mit einem fake-emailer, um zu überprüfen, senden Sie hieß?
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 = "[email protected]"
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>")
Und die unit-tests,
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/[email protected]&body=blah_blah_blah&subject=mySubject')
self.assertEqual('200 OK', response.status)
self.assertTrue('success' in response)
# somehow, assert email was sent
- Danke für den link zu GAEUnit. Ich war für so etwas suchen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine sehr kurze Einführung bietet PyPI: MiniMock 1.0. Es ist eine sehr kleine Bibliothek zu Gründen verspottet.
Glück!
Könnte man auch überschreiben Sie die
_GenerateLog
Methode in dermail_stub
innen AppEngine.Hier ist eine Eltern-TestCase-Klasse, die ich als mixin bei der Prüfung, dass e-mails gesendet werden:
Danach einen Probe-test-Fall Aussehen könnte:
Einfach folgenden verwenden, um alle Nachrichten, die seit der Aktivierung der E-mail-stub.
Google hat eine wirklich einfache Möglichkeit, dies zu tun in Ihrem Dokumentation.
Erstellen Sie eine Testumgebung und E-mail-stub in Ihrem setup wie diesem:
Ausführen der Methode, und dann überprüfen Sie es wie folgt:
Ich verwendet jgeewax die GAE Testbed mit GAEUnit. Mit GAEUnit statt NoseGAE war einfacher für mich, da hatte ich schon GAEUnit im Ort. Hier sind die Schritte:
Hinzufügen GAEUnit zu Ihrer app
gaeunit.py
zu Ihrem app-root-Ordner.app.yaml
, direkt unterhalb der Zeile, die sagthandlers:
:Code:
(Optional) Aus dem Ordner extrahiert aus dem Archiv gibt es einen Ordner mit dem Namen
sample_app
- und innen-es ist die modifizierte version derwebtest
Modul. Kopieren Sie diewebtest
Modul (der gesamte Ordner mitdebugapp.py
und__init__.py
) an der Wurzel Ihrer app.Hinzufügen GAE Testbed zu GAEUnit:
gaetestbed
- Modul (es ist der Ordner mit dem Namen "gaetestbed"). Kopieren Sie das Modul an der Wurzel Ihrer app.test_mailer.py
.test_mailer.py
:Code:
Starten Sie Ihren server und gehen Sie zu
http://localhost:8080/test
. Sie sollten beachten, dass (zusätzliche) 1/1 test war, lief vonhttp://localhost:8080/test
.Quelle: Mit GAE Testbed mit GAEUnit: Tests, dass die E-Mail gesendet wurde