tests - python django unittest




Schreibeinheitstests in Django/Python (2)

Vermutlich hast du bereits Testing Django Applications gelesen.

Beginnen Sie mit dem Testen der normalen Anwendungsfälle Ihrer Anwendung, erstellen Sie einen neuen Benutzer, fügen Sie einen Blogeintrag usw. hinzu. Fahren Sie zunächst mit Ihren typischen CRUD-Operationen fort und gehen Sie dann zu den Edge-Fällen. Grundsätzlich wird das Vertrauen in Ihre Anwendung, dass alles, was Sie später ändern, das Verhalten der Anwendung nicht beeinträchtigen.

Simulieren Sie GET / POST-Anfragen für Ihre URLs und beobachten Sie die Antworten (Kopfzeilen, Statuscodes und Inhalte). Hat Ihre Anwendung die richtige Ansicht gerendert? Verwenden Sie die richtige Vorlage? Versuchen Sie in den Abschnitten, in denen Ihre Anwendung Ausnahmen auslöst, diese auszulösen (z. B. Anzeigen / Bearbeiten eines nicht vorhandenen Datensatzes, um ObjectDoesNotExist auszulösen).

In der Regel lohnt es sich, ein Tracking-System (z. B. Trac) einzusetzen, damit Sie für jeden protokollierten Fehler einen neuen Test hinzufügen können.

Ich habe Unit-Tests nicht vor einer kurzen Einführung in einen Uni-Kurs verwendet. Ich schreibe gerade eine Anwendung und möchte mich TDD dabei beibringen. Das Problem ist, ich habe keine Ahnung, was ich testen soll oder wie.

Ich schreibe eine Django-Anwendung und habe bisher nur die Modelle erstellt (und die Admin-Anwendung angepasst). So habe ich die Skelette meiner bisherigen Tests geschrieben:

class ModelTests(TestCase):
    fixtures = ['initial_data.json',]

    def setUp(self):
        pass

    def testSSA(self):
        ssa = SSA.objects.create(name="sdfsdf", cost_center=1111, street_num=8,
                street_name="dfsdfsf Street", suburb="sdfsdfsdf",
                post_code=3333)


    def testResident(self):
        pass

    def testSSA_Client(self):
        pass

Ich plante, eine Funktion zu schreiben, um jedes Modell innerhalb der ModelTests-Klasse zu testen. Ist das eine gute Möglichkeit, Tests zu schreiben? Auch was genau sollte ich testen? Das Erstellen eines Modells mit allen abgeschlossenen Feldern funktioniert? Dass ein halb vollständiges Modell versagt? Dass irgendwelche Spezialfälle getestet werden (wie eine Null und is_required = False)? Ich habe Vertrauen in das ORM, das, soweit ich weiß, stark getestet ist, also sollte ich nicht alle Methoden testen müssen, sollte ich?

Was muss ich für eine in Django / Python geschriebene Webanwendung testen? Einige Beispiele wären nett.


Ist eine Funktion zum Testen jedes Modells in der ModelTests-Klasse eine gute Möglichkeit, Tests zu schreiben?

Nein.

Was genau sollte ich testen?

  • Das Erstellen eines Modells mit allen abgeschlossenen Feldern funktioniert?

  • Dass ein halb vollständiges Modell versagt?

  • Dass irgendwelche Spezialfälle getestet werden (wie eine Null und is_required = False)?

  • Ich habe Vertrauen in das ORM, das, soweit ich weiß, stark getestet ist, also sollte ich nicht alle Methoden testen müssen, sollte ich?

Nicht viel davon.

Sie könnten Validierungsregeln testen, aber das ist nicht sinnvoll, bis Sie einige Form-Objekte definiert haben. Dann haben Sie etwas zu testen - erzwingt das Formular alle Regeln. Sie benötigen mindestens eine TestCase-Klasse für jedes Formular. Eine Funktion ist ein Szenario - verschiedene Kombinationen von Eingaben, die erlaubt oder nicht erlaubt sind.

Für jede Model-Klasse benötigen Sie mindestens eine TestCase-Klassendefinition. Testfälle sind billig, definieren viele davon.

Ihr Modell verkörpert Ihre "Geschäftseinheit" -Definitionen. Ihre Modelle verfügen über Methoden zum Implementieren von Geschäftsregeln. Ihre Methoden werden Dinge zusammenfassen, filtern, berechnen, zusammenfassen, reduzieren, alle möglichen Dinge. Sie haben Funktionen für jedes dieser Features einer Modellklasse.

Du testest Django nicht. Sie testen, wie Ihre Geschäftsregeln in Django funktionieren.

Später, wenn Sie mehr Dinge in Ihrer Anwendung haben (Formulare, Ansichten, URLs usw.), sollten Sie den Django-Unittest-Client verwenden, um jede Methode für jede URL auszuprobieren. Wiederum ein Testfall pro





unit-testing