Ihren Code testen

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir lernen, wie man mit dem eingebauten unittest-Modul unit-Tests für unseren Python-Code schreibt. Wir beginnen mit einer einfachen Funktion und bauen dann auf, um komplexere Code zu testen, einschließlich Code, der mit Datenbanken interagiert.

Voraussetzungen

Bevor Sie mit diesem Lab beginnen, sollten Sie eine grundlegende Kenntnis der Python-Programmiersprache haben. Sie sollten auch etwas Erfahrung im Schreiben von Funktionen in Python haben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/arguments_return("Arguments and Return Values") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/ErrorandExceptionHandlingGroup -.-> python/raising_exceptions("Raising Exceptions") python/ErrorandExceptionHandlingGroup -.-> python/custom_exceptions("Custom Exceptions") python/FileHandlingGroup -.-> python/file_operations("File Operations") subgraph Lab Skills python/function_definition -.-> lab-247{{"Ihren Code testen"}} python/arguments_return -.-> lab-247{{"Ihren Code testen"}} python/importing_modules -.-> lab-247{{"Ihren Code testen"}} python/catching_exceptions -.-> lab-247{{"Ihren Code testen"}} python/raising_exceptions -.-> lab-247{{"Ihren Code testen"}} python/custom_exceptions -.-> lab-247{{"Ihren Code testen"}} python/file_operations -.-> lab-247{{"Ihren Code testen"}} end

Zahlen addieren

Einrichtung

Um loszulegen, müssen wir eine neue Python-Datei für unsere Tests erstellen. Nennen wir sie test_my_code.py. Wir werden auch ein Modul erstellen, das den Code enthält, den wir testen möchten. Nennen wir dieses Modul my_code.py.

Einfacher Test

Beginnen wir mit einer einfachen Funktion, die die Summe von zwei Zahlen zurückgibt. In my_code.py erstellen Sie eine Funktion namens add_numbers, die zwei Argumente annimmt und ihre Summe zurückgibt.

def add_numbers(a, b):
    return a + b

Schreiben wir nun einen Test für diese Funktion in test_my_code.py. Zunächst müssen wir das unittest-Modul und die add_numbers-Funktion importieren.

import unittest
from my_code import add_numbers

Als nächstes erstellen wir eine Klasse namens TestAddNumbers, die von unittest.TestCase erbt.

class TestAddNumbers(unittest.TestCase):
    pass

Innerhalb dieser Klasse erstellen wir eine Methode namens test_add_numbers, die die add_numbers-Funktion testen wird. Wir werden die assertEqual-Methode verwenden, um zu überprüfen, ob die Funktion die richtige Summe zurückgibt.

class TestAddNumbers(unittest.TestCase):
    def test_add_numbers(self):
        result = add_numbers(2, 3)
        self.assertEqual(result, 5)

Nun können wir unsere Tests mit dem folgenden Befehl ausführen:

python -m unittest test_my_code.py

Wenn der Test erfolgreich ist, sollten Sie eine Ausgabe wie die folgende sehen:

...
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

Der . zeigt an, dass ein Test bestanden wurde.

Ausnahmen testen

Als nächstes testen wir eine Funktion, die eine Ausnahme auslöst. In my_code.py erstellen Sie eine Funktion namens divide, die zwei Argumente annimmt und ihren Quotienten zurückgibt. Wenn das zweite Argument null ist, sollte die Funktion eine ZeroDivisionError auslösen.

def divide(a, b):
    if b == 0:
        raise ZeroDivisionError('Cannot divide by zero')
    return a / b

Schreiben wir nun einen Test für diese Funktion in test_my_code.py. Wir werden die assertRaises-Methode verwenden, um zu überprüfen, ob die Funktion eine ZeroDivisionError auslöst, wenn das zweite Argument null ist.

class TestDivide(unittest.TestCase):
    def test_divide_by_zero(self):
        with self.assertRaises(ZeroDivisionError):
            divide(1, 0)

Nun können wir unsere Tests erneut ausführen:

python -m unittest test_my_code.py

Wenn der Test erfolgreich ist, sollten Sie eine Ausgabe wie die folgende sehen:

...
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

Die .. zeigt an, dass zwei Tests bestanden wurden.

Testen mit Datenbanken

Schließlich testen wir einige Code, der mit einer Datenbank interagiert. Für dieses Beispiel verwenden wir SQLite und das sqlite3-Modul.

In my_code.py erstellen Sie eine Funktion namens create_table, die eine neue Tabelle in einer SQLite-Datenbank erstellt.

import sqlite3

def create_table():
    conn = sqlite3.connect('my_database.db')
    c = conn.cursor()
    c.execute('CREATE TABLE IF NOT EXISTS my_table (id INTEGER PRIMARY KEY, name TEXT)')
    conn.commit()
    conn.close()

In diesem Code erstellen wir eine neue SQLite-Datenbanktabelle namens "my_table" mit zwei Spalten: "id" und "name". Anschließend definieren wir eine Testklasse namens TestCreateTable mit einer setUp-Methode, die eine SQLite-Datenbank für das Testen erstellt.

Schreiben wir nun einen Test für die create_table-Funktion. Zunächst müssen wir eine neue Datenbank für das Testen erstellen. Dies tun wir in einer Einrichtungs-Methode, die vor jedem Test ausgeführt wird.

class TestCreateTable(unittest.TestCase):
    def setUp(self):
        self.conn = sqlite3.connect('my_database.db')

    def test_create_table(self):
        create_table()
        c = self.conn.cursor()
        c.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='my_table'")
        result = c.fetchone()
        self.assertIsNotNone(result)

In der setUp-Methode erstellen wir eine neue SQLite-Datenbank.

In der test_create_table-Methode rufen wir die create_table-Funktion auf und überprüfen dann, ob die Tabelle mit einer SQL-Abfrage erstellt wurde.

Nun können wir unsere Tests erneut ausführen:

python -m unittest test_my_code.py

Wenn der Test erfolgreich ist, sollten Sie eine Ausgabe wie die folgende sehen:

...
----------------------------------------------------------------------
Ran 3 tests in 0.001s

OK

Die ... zeigt an, dass drei Tests bestanden wurden.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man mit dem unittest-Modul unit-Tests für unseren Python-Code schreibt. Wir haben mit einer einfachen Funktion begonnen und sind dann zu der Überprüfung von komplexeren Code aufgebaut, einschließlich von Code, der mit Datenbanken interagiert. Mit diesen Kenntnissen können Sie Tests für Ihren Python-Code schreiben, um sicherzustellen, dass er wie erwartet funktioniert und Fehler schon früh im Entwicklungsprozess aufdeckt.