wake-up-neo.com

Komponententests in Python schreiben: Wie fange ich an?

Ich habe mein erstes richtiges Projekt in Python abgeschlossen und jetzt ist es meine Aufgabe, Tests dafür zu schreiben.

Da ich zum ersten Mal ein Projekt durchgeführt habe, schreibe ich zum ersten Mal Tests dafür.

Die Frage ist, wie beginne ich? Ich habe absolut keine Ahnung. Kann mich jemand auf eine Dokumentation/ein Tutorial/einen Link/ein Buch verweisen, mit dem ich anfangen kann, Tests zu schreiben (und ich vermute, insbesondere Unit-Tests)?

Jeder Rat wird zu diesem Thema begrüßt.

517
user225312

Wenn Sie noch keine Erfahrung mit Unittests haben, ist der einfachste Lernansatz oft der beste. Auf dieser Basis empfehle ich die Verwendung von py.test anstelle von dem Standardmodul unittest .

Betrachten Sie diese beiden Beispiele, die dasselbe tun:

Beispiel 1 (unittest):

_import unittest

class LearningCase(unittest.TestCase):
    def test_starting_out(self):
        self.assertEqual(1, 1)

def main():
    unittest.main()

if __== "__main__":
    main()
_

Beispiel 2 (Pytest):

_def test_starting_out():
    assert 1 == 1
_

Angenommen, beide Dateien heißen _test_unittesting.py_, wie werden die Tests ausgeführt?

Beispiel 1 (unittest):

_cd /path/to/dir/
python test_unittesting.py
_

Beispiel 2 (Pytest):

_cd /path/to/dir/
py.test
_
98
Tim McNamara

Das kostenlose Python Buch Dive Into Python enthält ein Kapitel über Unit-Tests , das Sie vielleicht nützlich finden.

Wenn Sie modernen Praktiken folgen, sollten Sie die Tests wahrscheinlich schreiben, während Sie Ihr Projekt schreiben, und nicht warten, bis Ihr Projekt fast fertig ist.

Jetzt etwas spät, aber jetzt weißt du es für das nächste Mal. :)

70
Mark Byers

Meiner Meinung nach gibt es drei großartige python Test-Frameworks, die sich gut überprüfen lassen.
nittest - Modul wird standardmäßig mit allen python Distributionen ausgeliefert
Nase - kann unempfindliche Tests durchführen und hat weniger Kesselplatte.
pytest - führt auch kleinste Tests durch, hat weniger Boilerplate, bessere Berichterstattung, viele coole Zusatzfunktionen

Um einen guten Vergleich von all diesen zu erhalten, lesen Sie die Einführungen zu jedem unter http://pythontesting.net/start-here .
Es gibt auch erweiterte Artikel zu Spielpaarungen und mehr.

38
Okken

Die Dokumentation für nittest wäre ein guter Anfang.

Es ist auch etwas spät, aber in Zukunft sollten Sie Unit-Tests vor oder während des Projekts selbst schreiben. Auf diese Weise können Sie sie zum Testen verwenden und (theoretisch) als Regressionstests verwenden, um sicherzustellen, dass Ihre Codeänderungen keinen vorhandenen Code beschädigt haben. Dies gibt Ihnen den vollen Vorteil des Schreibens von Testfällen :)

34
Justin Ethier

unittest wird mit der Standardbibliothek geliefert, aber ich würde Sie empfehlen nosetests.

" Nase reicht am wenigsten aus, um das Testen zu vereinfachen. "

Ich würde Sie auch empfehlen Pylint

" analysiert Python Quellcode auf Fehler und Anzeichen von schlechter Qualität. "

27
ssoler

Wie andere bereits geantwortet haben, ist es spät, Unit-Tests zu schreiben, aber nicht zu spät. Die Frage ist, ob Ihr Code prüfbar ist oder nicht. In der Tat ist es nicht einfach, vorhandenen Code zu testen, es gibt sogar ein Buch darüber: Effektiv mit Legacy-Code arbeiten (Siehe wichtige Punkte oder PDF-Vorläufer ).

Jetzt schreiben die Unit-Tests oder nicht ist Ihr Anruf. Sie müssen sich nur darüber im Klaren sein, dass dies eine mühsame Aufgabe sein kann. Sie können dies in Angriff nehmen, um Unit-Tests zu erlernen, oder Sie erwägen, zuerst Akzeptanztests (End-to-End-Tests) zu schreiben und Unit-Tests zu schreiben, wenn Sie den Code ändern oder dem Projekt neue Funktionen hinzufügen.

8
philant

nosetests ist eine hervorragende Lösung für Unit-Tests in Python. Es unterstützt sowohl unittest-basierte Testfälle als auch doctests und ermöglicht Ihnen den Einstieg mit nur einer einfachen Konfigurationsdatei.

3
Daniel Kluev