Ich möchte versuchen, Code nach TDD-Praxis zu schreiben. Ich möchte eine einfache App basierend auf dem Tornado-Framework von Python erstellen. Ich war auf der Suche über das Internet, wie Menschen Tests für Tornado schreiben und fand etwas wie folgt aus:Wie schreibt man Komponententests für Python Tornado-Anwendung?
class TestSomeHandler(AsyncHTTPTestCase):
def test_success(self):
response = self.fetch('/something')
self.assertEqual(response.code, 200)
mich korrigieren, wenn ich falsch, aber es sieht eher wie Integrationstests. Stattdessen versuche ich einen einfachen Komponententest für einen Dummy-Handler zu schreiben. Zum Beispiel so ein:
class SomeHandler(BaseHandler):
@gen.coroutine
def get(self):
try:
from_date = self.get_query_argument("from", default=None)
datetime.datetime.strptime(from_date, '%Y-%m-%d')
except ValueError:
raise ValueError("Incorrect argument value for from_date = %s, should be YYYY-MM-DD" % from_date)
Und Test würde wie folgt aussehen:
class TestSomeHandler(AsyncHTTPTestCase):
def test_no_from_date_param(self):
handler = SomeHandler()
with self.assertRaises(ValueError):
handler.get()
Ich weiß, dass ich bei get()
Anwendung und Anforderung verpassen. Noch nicht behandelt, wie man sie erstellt.
Aber meine Frage ist, schreiben Menschen Tests für Tornado wie im ersten Beispiel oder jemand ruft Handler innerhalb der App? Welches Muster soll folgen? Es wäre schön, wenn jemand relevanten Code zum Teilen hätte.
Wie ich verstehe, ist ein solcher Fluss nicht vorzuziehen. Aber in anderen Fällen kann ich keine Ausnahmen testen. –
@viakondratiuk der Verbraucher der Methode ist einige http-Client (Benutzer), jede Ausnahme, die Sie ausgelöst haben, ist es nur 50x mit einer Nachricht, wahrscheinlich Interner Fehler. Es ist okay? Ich denke nicht - es zeigt eine schlechte Fehlerbehandlung, versucht "Return" bedeutungsvolle Fehler zurückzugeben (sogar eine vereinheitlichte Nachricht) und weitere Serviceaufrufe und Debugging werden viel einfacher zu nehmen sein. – kwarunek