So erstellen Sie eine Website oder ein Blog im Jahr 2020 - Kostenlose und einfache Anleitung zum Erstellen einer Website

Unit-Tests mit dem Python-Unittest-Modul

Hinweis: Im nächsten Thema, das Sie lesen werden, erfahren Sie mehr über: Unit-Tests mit dem Python-Unittest-Modul

Kein guter Entwickler implementiert Code ohne umfangreiche Tests. Unit-Testing ist der Prozess des Testens der einzelnen Module eines großen Programms.

In diesem Artikel wird erläutert, wie Sie Ihren Code mit dem Python-Unit-Test-Modul einem Unit-Test unterziehen können. Lassen Sie uns zunächst verstehen, welche Arten von Tests es gibt.

Beim Testen gibt es manuelle Tests und automatisierte Tests. manueller Test Es handelt sich um eine Testtechnik, bei der Menschen nach Abschluss der Entwicklung manuell testen. Automatisierungstests Es handelt sich um eine Testtechnik, bei der Programme den Test automatisch durchführen und uns die Ergebnisse liefern.

Sie hätten verstanden, dass manuelle Tests zeitaufwändig und schwierig durchzuführen sind. Anschließend schreiben Entwickler Code, um Tests durchzuführen (automatisierte Tests). Bei automatisierten Tests gibt es verschiedene Arten von Tests. Einige von ihnen sind Unit-Tests, Integrationstests, End-to-End-Tests, Stresstests, usw..,

Schauen wir uns den Standardtestablauf an.

  • Schreiben oder aktualisieren Sie den Code.
  • Schreiben oder aktualisieren Sie Tests für verschiedene Fälle für Ihren Code.
  • Führen Sie die Tests aus (entweder manuell oder mit einem Testläufer).
  • Sehen Sie sich die Testergebnisse an. Wenn Fehler auftreten, korrigieren Sie diese und wiederholen Sie die Schritte.

Hier werden wir die wichtigste und grundlegendste Art von Tests besprechen Gerätetest. Lassen Sie uns ohne weitere Umschweife in das eigentliche Tutorial eintauchen.

Was ist ein Unit-Test?

Unit-Testing ist eine Technik zum Testen eines kleinen, in sich geschlossenen Codeblocks. Der kleine Blockcode wird in den meisten Fällen eine Funktion sein. Das Wort „unabhängig“ bedeutet, dass es nicht von anderen Codeteilen im Projekt abhängt.

Nehmen wir an, wir müssen prüfen, ob eine Zeichenfolge gleich ist „Geekflare“ Oder nicht. Dafür haben wir eine Funktion geschrieben, die ein Argument entgegennimmt und zurückgibt, wenn es gleich ist „Geekflare“ Oder nicht.

def is_equal_to_geekflare(string):
	return string == "Geekflare"

Die obige Funktion hat keine Abhängigkeiten von irgendeinem anderen Code. So können wir es unabhängig testen, indem wir verschiedene Eingaben machen. Der eigenständige Codeabschnitt kann im gesamten Projekt verwendet werden.

Bedeutung von Unit-Tests

Im Allgemeinen kann Code aus separaten Blöcken im gesamten Projekt verwendet werden. Daher muss es gut geschrieben und getestet sein. Unit-Tests sind Tests, mit denen diese Arten unabhängiger Codeblöcke getestet werden. Was passiert, wenn wir für unser Projekt keine Unit-Tests verwenden?

Nehmen wir an, wir testen keine kleinen Codeblöcke, die im gesamten Projekt verwendet werden. Alle anderen Tests, wie Integrationstests, End-to-End-Tests usw., die die anderen kleinen Codeblöcke verwenden, schlagen möglicherweise fehl. Dies macht die App kaputt. Deshalb müssen die Grundbausteine ​​des Codes gut getestet werden.

Jetzt wissen wir, wie wichtig Unit-Tests und schriftliche Unit-Tests für alle unabhängigen Codeblöcke sind. Da wir Unit-Tests durchgeführt haben, werden andere Tests wie Integrationstests, End-to-End-Tests usw. aufgrund des unabhängigen Codeblocks nicht fehlschlagen.

In den nächsten Abschnitten schauen wir uns an, was das Python-Unittest-Modul ist und wie wir das Unittest-Modul verwenden, um Unit-Tests in Python zu schreiben.

Wir gehen davon aus, dass Sie sich mit Kursen, Modulen etc. auskennen. von Python. Wenn Sie mit fortgeschrittenen Python-Konzepten wie Klassen, Modulen usw. nicht vertraut sind, fällt es Ihnen möglicherweise schwer, die folgenden Abschnitte zu verstehen.

Was ist ein Python-Unit-Test?

Python Unittest ist ein integriertes Testframework zum Testen von Python-Code. Es verfügt über einen Test-Runner, der es uns ermöglicht, die Tests ohne großen Aufwand durchzuführen. Wir können also das eingebaute verwenden Gerätetest Modul zum Testen ohne Verwendung von Drittanbietermodulen. Es ändert sich jedoch je nach Ihren Anforderungen. das eingebaute Gerätetest Das Modul eignet sich gut für den Einstieg in das Testen in Python.

Wir müssen die folgenden Schritte ausführen, um Python-Code mit dem Unittest-Modul zu testen.

#1. Tippe den Code ein.

#2. Importieren Sie das Modul Unittest.

#3. Erstellen Sie eine Datei, die mit dem Schlüsselworttest beginnt. Zum Beispiel test_prime.py. Das Schlüsselwort wird zur Identifizierung der Testdateien verwendet.

#4. Erstellen Sie eine Klasse, die die Klasse unittest.TestCase erweitert.

#5. Schreiben Sie Methoden (Tests) innerhalb der Klasse. Jede Methode enthält je nach Ihren Anforderungen unterschiedliche Testfälle. Wir müssen die Methode benennen, beginnend mit dem Schlüsselwort test.

#6. Führen Sie die Tests durch. Wir können die Tests auf unterschiedliche Weise durchführen.

  • Führen Sie den Befehl python -m unittest test_filename.py aus.
  • Wir führen die Testdateien als allgemeine Python-Dateien mit dem Befehl python test_filename.py aus. Damit diese Methode funktioniert, müssen wir die Hauptmethode von Unittest in der Testdatei aufrufen.
  • Und schließlich mit der Discover-Methode. Wir können die Tests automatisch mit dem Befehl python -m unittest Discovery ausführen, ohne den Namen der Testdatei zu erwähnen. Sie finden die Tests anhand der von uns befolgten Namenskonvention. Daher müssen wir unsere Testdateien am Anfang mit dem Schlüsselwort test benennen.

Im Allgemeinen vergleichen wir in Tests die Ausgabe des Codes mit der erwarteten Ausgabe. Also, um die Ergebnisse zu vergleichen Gerätetest bietet verschiedene Methoden. Die Liste der Vergleichsfunktionen finden Sie hier.

Sie können sie problemlos verstehen. Sie sind einfach.

Das ist eine Menge Theorie. Jetzt müssen wir uns mit der Codierung befassen.

Wenn Sie Fragen zum Unittest-Modul haben, können Sie in der Dokumentation nachsehen und Ihre Zweifel ausräumen. Lassen Sie uns ohne weitere Verzögerung das Unittest-Modul verwenden.

Unit-Tests in Python mit Unittest

Zuerst schreiben wir einige Funktionen und konzentrieren uns dann auf das Schreiben der Tests. Öffnen Sie zunächst einen Ordner in Ihrem bevorzugten Code-Editor. Und erstellen Sie eine Datei namens utils.py. Fügen Sie den folgenden Code in die Datei ein.

import math


def is_prime(n):
    if n < 0:
        return 'Negative numbers are not allowed'

    if n <= 1:
        return False

    if n == 2:
        return True

    if n % 2 == 0:
        return False

    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True


def cubic(a):
    return a * a * a


def say_hello(name):
    return "Hello, " + name

Wir haben drei verschiedene Funktionen in der Datei utils.py. Jetzt müssen wir jede Funktion mit unterschiedlichen Testfällen testen. Schreiben wir die Tests für die erste Funktion is_prime.

#1. Erstellen Sie im Beispielordner eine Datei mit dem Namen test_utils.py als utils.py.

#2. Importieren Sie die Modul-Utils und Unittest.

#3. Erstellen Sie eine Klasse mit dem Namen TestUtils, die die Klasse unittest.TestCase erweitert. Der Klassenname kann beliebig sein. Versuchen Sie, der Klasse einen aussagekräftigen Namen zu geben.

#4. Schreiben Sie innerhalb der Klasse eine Methode namens test_is_prime, die sich selbst als Argument akzeptiert.

#5. Schreiben Sie verschiedene Testfälle mit Argumenten für is_prime und vergleichen Sie die Ausgabe mit der erwarteten Ausgabe.

#6. Beispieltestfall self.assertFalse(utils.is_prime(1)).

#7. Wir erwarten, dass die Ausgabe von is_prime(1) im obigen Fall falsch ist.

#8. Ähnlich wie im vorherigen Fall werden wir basierend auf der Funktion, die wir testen, verschiedene Testfälle durchführen.

Schauen wir uns die Tests an.

import unittest

import utils


class TestUtils(unittest.TestCase):
    def test_is_prime(self):
        self.assertFalse(utils.is_prime(4))
        self.assertTrue(utils.is_prime(2))
        self.assertTrue(utils.is_prime(3))
        self.assertFalse(utils.is_prime(8))
        self.assertFalse(utils.is_prime(10))
        self.assertTrue(utils.is_prime(7))
        self.assertEqual(utils.is_prime(-3),
                         "Negative numbers are not allowed")


if __name__ == '__main__':
    unittest.main()

Wir rufen die Haupteinheitstestmethode des Moduls auf, um die Tests mit dem Befehl python filename.py auszuführen. Machen Sie nun die Tests.

Sie erhalten eine Ausgabe ähnlich der folgenden.

$ python test_utils.py 
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

Versuchen Sie nun, die Testfälle auch für andere Funktionen zu schreiben. Überlegen Sie sich verschiedene Fälle für die Funktionen und schreiben Sie Tests dafür. Schauen Sie sich die folgenden Tests an, die zur obigen Klasse hinzugefügt wurden.

...


class TestUtils(unittest.TestCase):
    def test_is_prime(self):
        ...

    def test_cubic(self):
        self.assertEqual(utils.cubic(2), 8)
        self.assertEqual(utils.cubic(-2), -8)
        self.assertNotEqual(utils.cubic(2), 4)
        self.assertNotEqual(utils.cubic(-3), 27)

    def test_say_hello(self):
        self.assertEqual(utils.say_hello("Geekflare"), "Hello, Geekflare")
        self.assertEqual(utils.say_hello("Chandan"), "Hello, Chandan")
        self.assertNotEqual(utils.say_hello("Chandan"), "Hi, Chandan")
        self.assertNotEqual(utils.say_hello("Hafeez"), "Hi, Hafeez")


...

Wir verwenden nur einige der Vergleichsfunktionen des Unittest-Moduls. Die vollständige Liste finden Sie hier.

Wir haben gelernt, wie man Unit-Tests mit dem Unittest-Modul schreibt. Jetzt ist es an der Zeit, verschiedene Möglichkeiten zur Durchführung Ihrer Tests zu prüfen.

So führen Sie Tests mit Unittest durch

Eine Möglichkeit, die Testfälle auszuführen, haben wir bereits im vorherigen Abschnitt gesehen. Schauen wir uns die beiden anderen Möglichkeiten zum Ausführen von Tests mit dem Unittest-Modul an.

#1. Verwendung des Dateinamens und des Moduls unittest.

Bei dieser Methode verwenden wir das Unittest-Modul und den Dateinamen, um die Tests auszuführen. Der Befehl zum Ausführen der Tests lautet python -m unittest filename.py. In unserem Fall lautet der Befehl zum Ausführen der Tests python -m unittest test_utils.py.

#2. Verwenden der Discover-Methode

Wir verwenden die Erkennungsmethode des Unittest-Moduls, um alle Testdateien automatisch zu erkennen und auszuführen. Um Testdateien automatisch zu erkennen, müssen wir sie beginnend mit dem Schlüsselwort test benennen.

Der Befehl zum Ausführen von Tests mit der Discover-Methode lautet python -m unittest discover. Der Befehl erkennt alle Dateien, deren Namen mit test beginnen, und führt sie aus.

Fazit 👩‍💻

Unit-Tests sind grundlegende Tests in der Welt der Programmierung. Es gibt viele andere Tests in der realen Welt. Versuchen Sie, sie einzeln zu lernen. Ich hoffe, dieses Tutorial hilft Ihnen beim Schreiben grundlegender Tests in Python mit dem Unittest-Modul. Es gibt Bibliotheken von Drittanbietern wie Pytest, Robot Framework, Nose, Nose2, Slash usw. Sie können sie basierend auf Ihren Projektanforderungen erkunden.

Viel Spaß beim Testen 😎

Möglicherweise interessieren Sie sich auch für Fragen und Antworten zum Python-Interview.