What is Unit Testing
Agil Automatisierung Bewährte Methoden
16 min lesen
November 7, 2024

Unit Tests: Alles, was Sie wissen müssen

Unit-Tests sind die kleinsten, aber gleichzeitig auch eine der wichtigsten Arten von Softwaretests. Lassen Sie uns betrachten, warum Unit-Tests wichtig sind und welche Techniken sie auf die nächste Stufe heben können.

photo
photo
Robert Weingartz
Denis Matusovskiy

Was sind Unit-Tests?

Komponententests (Unit Tests) sind automatisierte Tests, die einzelne Komponenten oder Funktionen des Codes validieren, um sicherzustellen, dass sie wie erwartet funktionieren. Durch die Isolierung dieser Komponenten kann ihre Funktionalität überprüft werden, ohne dass es zu Beeinflussungen durch andere Teile der Anwendung kommt.

Strategien für Unit-Tests

Nachdem Unit-Tests definiert wurden, ist es entscheidend, gezielte Strategien anzuwenden, die auf bestimmte Aspekte des Code-Verhaltens abzielen. Diese Strategien stellen sicher, dass die einzelnen Komponenten umfassend getestet werden, einschließlich logischer Abläufe, Grenzwerte, objektorientierter Interaktionen und Fehlerbehandlung. Mit diesen Ansätzen entsteht eine robuste Test-Suite, die potenzielle Probleme aus verschiedenen Blickwinkeln angeht. Das Ergebnis ist eine widerstandsfähigere und zuverlässigere Code-Basis. Schauen wir uns die Strategien nun im Einzelnen an:

Logic Checks 

Logic checks stellen sicher, dass die Entscheidungsprozesse in Ihrem Code korrekt funktionieren. Sie helfen, Laufzeitfehler zu vermeiden.

Grenzprüfungen

Grenzprüfungen überprüfen, wie Ihr Code mit Randfällen umgeht. Sie schützen den Code vor unerwarteten Eingaben.

Objektorientierte Tests

Objektorientierte Tests bewerten das Verhalten und die Interaktionen von Klassen, um zu überprüfen, ob sie wie vorgesehen funktionieren.

Fehlerbehebung

Fehlerbehebung sorgt dafür, dass Ihr Code unerwartete Eingaben oder Fehler bewältigen kann, wodurch Abstürze reduziert und die Stabilität der Anwendung aufrechterhalten werden.

Beispiel für einen Unit test

Hier ist ein einfaches Beispiel für einen Unit-Test in Python mit dem unittest framework.  Angenommen, Sie haben eine Funktion, die zwei Zahlen addiert:

python

Copy code

def add(a, b):

    return a + b

Sie können einen Unit-Test erstellen, um diese Funktionalität zu überprüfen:

python

Copy code

import unittest

class TestMathFunctions(unittest.TestCase):

    def test_add(self):

        self.assertEqual(add(2, 3), 5)

        self.assertEqual(add(-1, 1), 0)

if __name__ == ‚__main__‘:

    unittest.main()

Dieser Test überprüft, ob die Funktion add für verschiedene Eingaben die korrekten Ergebnisse liefert. Dadurch stellen Sie sicher, dass sie wie erwartet funktioniert und können potenzielle Probleme in Ihrer Additionslogik frühzeitig erkennen.

Was ist der Unterschied zwischen Unit-Tests und anderen Testarten?

Wie wir bereits wissen, isoliert und testet Unit-Testing die kleinsten Codeeinheiten – einzelne Funktionen oder Methoden –, um sicherzustellen, dass jede wie erwartet funktioniert. Im Gegensatz zu anderen Testarten richtet sich Unit-Testing auf eine spezifische „Einheit“ gleichzeitig aus, ohne Abhängigkeiten zu anderen Teilen des Codes. Schauen wir uns die wichtigsten Unterschiede zu anderen Testarten an, mit denen es oft verwechselt wird:

  • Integrationstests
    Integrationstests, oft als  Black-Box-Technik bezeichnet, überprüfen, wie mehrere Komponenten zusammenarbeiten, wobei der Hauptfokus auf den Interaktionen zwischen den Einheiten liegt. Im Gegensatz zu Unit-Tests, die eine einzelne Funktion oder Methode isoliert testen, prüfen Integrationstests, ob kombinierte Einheiten reibungslos funktionieren.

Beispiel:Bei einem Login-System würde ein Unit-Test die Richtigkeit der Passwortverifizierungsfunktion allein bestätigen, während ein Integrationstest prüft, wie diese Funktion mit der Datenbank und der Benutzeroberfläche interagiert. Integrationstests helfen dabei, Probleme zu erkennen, die in isolierten Tests möglicherweise übersehen werden.

  • Systemtests
    Systemtests bewerten die gesamte Anwendung als ein vollständiges, kohärentes System und konzentrieren sich auf die End-to-End-Funktionalität. Im Gegensatz zu Unit-Tests, die einzelne Teile testen, simulieren Systemtests die reale Nutzung, ohne jedes Teil separat zu untersuchen.

Beispiel:  Bei einer E-Commerce-Website könnte ein Unit-Test überprüfen, ob eine „In den Warenkorb“-Funktion die Anzahl im Warenkorb korrekt erhöht, während ein Systemtest die gesamte Kaufreise simulieren würde, einschließlich der Hinzufügung von Artikeln zum Warenkorb, dem Checkout-Prozess und der Zahlung. Systemtests stellen sicher, dass alle Funktionen zusammen ohne Probleme funktionieren.

  • Abnahmetests
    Abnahmetests prüfen, ob die Software die Benutzeranforderungen und geschäftlichen Ziele erfüllt, oft durch Tests der Endbenutzer. Im Gegensatz zu Unit-Tests, die sich rein auf die technische Genauigkeit einzelner Funktionen konzentrieren, richten sich Abnahmetests auf die Benutzerfreundlichkeit und darauf, ob das System den beabsichtigten Zweck erfüllt.

Beispiel: In einer Buchungsanwendung könnte ein Unit-Test prüfen, ob die Datumsselektionsfunktion nur gültige Daten zulässt, während ein Abnahmetest bestätigen würde, dass Benutzer erfolgreich eine Buchung vornehmen, ändern oder stornieren können, wie erwartet, und damit die gesamte Benutzererfahrung und die geschäftlichen Anforderungen widerspiegeln.

Die Definition von Unit-Tests ist einfach: Sie testen das kleinste Stück Ihrer Software, das isoliert werden kann. Es kann so klein wie eine einzige Codezeile oder so groß wie ein Modul sein. Dies ist jedoch einer der Fälle, in denen kleiner besser ist, selbst wenn man an einem Großprojekt arbeitet.

Software-Unit-Tests werden in der Regel von den Entwicklern selbst durchgeführt. Tatsächlich haben sie möglicherweise nicht die Zeit oder die Qualitätssicherungskenntnisse für einen ordentlichen Unit-Testplan. Entwickler kennen ihren eigenen Code jedoch besser, als es QA-Spezialisten je verstehen könnten. Das Testen von Code, bevor er an die Qualitätssicherung weitergegeben wird, ist seit Jahren eine bewährte Praxis.

Vorteile von Unit-Tests

Der Zweck von Unit-Tests lässt sich nicht auf eine einzige Sache eingrenzen. Entwickler zu haben, die kleine Codeeinheiten durchgehen, hat mehrere Vorteile:

  • Verbessert das Verständnis des Codebases durch den Entwickler. Dies ist besonders relevant für neue Mitglieder im Team. Egal, wie viel Dokumentation Sie neuen Entwicklern bereitstellen, praktische Erfahrung macht die Dinge immer einfacher.e viel Dokumentation man neuen Entwicklern zur Verfügung stellt, Übung macht immer alles einfacher.
  • Selbständig-nachhaltig, d. h. weder die Entwickler noch die QS-Spezialisten warten darauf, dass andere ihren Code zuerst fertigstellen
  • Erleichtert gute Regressionstests oder vielmehr eine gute Nachbereitung von Regressionstests. Wenn sie ein Problem aufdecken, ist es viel einfacher, die Ursache einzugrenzen und den Fehler zu beheben, wenn kleine Teile des Codes durch individuelle Testfälle abgedeckt werden
  • Verbessert die Qualität des Codes. Es ist fehlerhaft, Entwickler nicht in den Testprozess einzubeziehen, und die Unterlassung, das Projekt von besserem Code profitieren zu lassen, ist eines der Probleme. Hastige Überarbeitungen und kurzfristige Fehlerbehebungen tragen zur technischen Schuldenlast bei und machen die Software anfällig für Notlösungen anstelle von echten Lösungen. Regelmäßige Tests in kleinen Schritten bringen mehr Aufmerksamkeit für Details und verhindern, dass Mängel sich anhäufen.
  • Spart Zeit und Geld. Es ist ganz einfach: Gute automatisierte Unit-Tests bedeutet, dass viele Probleme ohne menschlichen Aufwand erkannt werden. Eine einmalige Investition plus einige Wartungsarbeiten entlasten den Zeitplan von Entwicklern und Testern erheblich

Advantages of unit testing

image
3zbdcc601729bfa1d4e33335cfb5176b61c737a68bafd4b4a38a8ef653a7771392
testing strategy template

Holen Sie sich eine Vorlage für eine Teststrategie, die es uns ermöglicht, Software 2 Mal so schnell zu veröffentlichen

Unit-Testing-Techniken

Die Unit-Testing-Techniken entsprechen den allgemeinen Testtechniken.

  • Black-Box-Technik deckt das Softwareverhalten aus der Sicht der Benutzer ab: der QS-Spezialist weiß nicht, wie die Lösung konzipiert ist
  • White-Box-Technik bezieht sich auf das Testen mit dem Wissen, wie die Software entwickelt wurde, um zu funktionieren
  • Die Grey-Box-Technik stellt einen Mittelweg dar: Sie testet die benutzerseitigen Funktionen wie Black-Box-Tests, jedoch mit dem Wissen um die Architektur der Lösung

In Bezug auf Unit-Tests gedeihen sowohl manuelle als auch automatisierte Ansätze. Wie bei anderen Testarten ist Letzteres nur dann sinnvoll, wenn man weiß, warum man die Qualitätssicherung automatisiert. Die Rolle der Entwickler im Unit-Test bedeutet, dass auch Nicht-Tester eine Arbeitsbelastung im Bereich der Qualitätssicherung haben, sodass eine verstärkte Automatisierung kosteneffizienter denn je sein könnte.


Interessieren Sie sich für die verschiedenen Arten von Tests?

Lesen Sie unseren Artikel über Benutzer Akzeptanz Tests Definition, Verwendung und Herausforderungen


Es kann schwierig sein, Entwickler dazu zu bringen, in Unit-Tests zu investieren. Alan Mellor, der Autor von Java OOP Done Right mit mehr als 30 Jahren Erfahrung in der Software-Engineering, beschreibt die Vorteile für Entwickler folgendermaßen:

Ein Unit-Test besteht immer aus drei Teilen: Arrangieren, Handeln, Bestätigen. Die letzten beiden sind immer Einzeiler. Sie drücken auch ein Stück Designdenken aus, mit dem Sie vertraut sein werden: Die API Ihres Codes und wie sie mit dem Aufrufer kommuniziert. Unit-Tests sind nur in der Phase des Arrangierens wirklich schwierig zu schreiben. Hier erstellen Sie den Graphen von Objekten und Anfangszuständen, die für die Durchführung des Tests benötigt werden. Wenn sich in Ihr Code Fehler eingeschlichen hat, kann dies sehr schwierig sein. Dies ist das erste Anzeichen dafür, dass Ihr Design schlecht ist.

Ein Unit-Test besteht immer aus drei Teilen: Arrangieren, Handeln, Bestätigen. Die letzten beiden sind immer Einzeiler. Sie drücken auch ein Stück Designdenken aus, mit dem Sie vertraut sein werden: Die API Ihres Codes und wie sie mit dem Aufrufer kommuniziert. Unit-Tests sind nur in der Phase des Arrangierens wirklich schwierig zu schreiben. Hier erstellen Sie den Graphen von Objekten und Anfangszuständen, die für die Durchführung des Tests benötigt werden. Wenn sich in Ihr Code Fehler eingeschlichen hat, kann dies sehr schwierig sein. Dies ist das erste Anzeichen dafür, dass Ihr Design schlecht ist. Wahrscheinlich haben Sie immer wieder Teile zusammengefügt, herumgeschrieben und zu viel auf einmal gemacht. Das tun wir alle. Die Antwort ist, diesen Teil des Codes neu zu gestalten. Teilen Sie einige Objekte so auf, dass jedes einzelne einen kleineren Teil der Arbeit erledigt. Dies verringert die Komplexität des Anordnungsschritts und auch des Produktionscodes. Wenn Sie Tests früher schreiben, verkürzen Sie den Feedback-Zyklus. Man wird sich der Unordnung früher bewusst. Außerdem bekommen Sie ein Gespür dafür, wie Sie Ihren Code von vornherein richtig aufteilen können, was auch das Testen erleichtert.

Alan Mellor, Autor von Java OOP Done Right,

Bewährte Praktiken

Hier finden Sie einige Ideen für Unit-Tests und API-Testing, damit Sie von den Versuchen und Fehlern anderer lernen können.

  • Wenden Sie das Protokoll „Geben/Wenn/Dann“ für die Organisation von Einheitstests an. Dieser Ansatz ist auch bekannt als Arrangieren (der Testaufbau), Handeln (auf der Unit für den Test), Bestätigen(das Ergebnis verifizieren), beschrieben von Alan Mellor
  • Halten Sie die Tests einfach. Wenn Sie zum Beispiel versuchen, alle möglichen Eingaben in einem Testfall zu berücksichtigen, haben Sie möglicherweise einen Test geschrieben, der den zu testenden Code weitgehend wiederholt.
  • Legen Sie sich eine gute Namenskonvention zurecht. Die Navigation all Ihrer Tests kann manchmal entmutigend sein, vor allem, wenn auch Entwickler an den Tests beteiligt sind. Mit der Namensgebung auf einer Wellenlänge zu sein, ist ein langer Weg

aqua tool für Unit-Tests

Testmanagementsysteme und Lösungen für das Application Lifecycle Management wie aqua werden nicht unbedingt für Unit-Tests verwendet. Die Entwickler schreiben die Tests und führen sie in einer IDE (integrierte Entwicklungsumgebung) aus, die nicht mit dem Server der Testmanagementlösung verbunden ist.

Auf der anderen Seite hilft ein Fehler-Reporting-Tool dabei, viele Konzepte zu erreichen und zu verstärken, die beim Unit-Testing angestrebt werden. Ein gutes Beispiel ist die Verfolgung der Testabdeckung. aqua bietet das schon seit Jahren, aber wir haben es nur mit einer übersichtlichen Spalte auf dem Anforderungsbildschirm visualisiert. Es gibt noch viele andere Funktionen, die die Zusammenarbeit zwischen Entwicklern und QA fördern, ähnlich wie bei den Unit-Tests.

aqua tool of unit testing

Schlussfolgerung

Unit-Tests sind ein großer Gewinn für jedes Softwareprojekt. Entwickler dazu zu bringen, ihren eigenen Code frühzeitig zu testen, hat sowohl kurz- als auch langfristige Vorteile für Ihr Unternehmen. Auch wenn Testmanagementlösungen wenig mit Unit-Tests zu tun haben, helfen sie Ihnen, die gleiche Zusammenarbeit zwischen Entwicklung und Qualitätssicherung sowie die Gründlichkeit und Prägnanz zu kultivieren, die Unit-Tests mit sich bringen.

Unit-Tests ersparen der QS die Zeit, sich mit Routinefehlern und kleinen Patzern zu beschäftigen. Künstliche Intelligenz macht das Gleiche, wenn es um die Erstellung neuer Tests geht. Sie müssen nicht zu viel Zeit damit verbringen, dieselben einfachen Fehlfunktionen von einer Funktion zur anderen zu behandeln.

aqua’s KI-Copilot gibt Ihnen die Flexibilität, bei Routinetests Zeit zu sparen. Sie können es bitten, ganze Tests nur auf der Grundlage einer Beschreibung zu erstellen oder Testschritte auszufüllen, die auf dem basieren, was Sie in anderen Testfällen verwendet haben. Ursprünglich im Jahr 2013 auf den Markt gebracht, verfügt aqua auch über eine Reihe von Funktionen für das Testmanagement außerhalb der KI.

Sparen Sie Zeit bei der QS-Routine mit KI-Tests

Testen Sie aqua
Auf dieser Seite:
Sehen Sie mehr
Beschleunigen Sie Ihre Releases x2 mit aqua
Gratis starten
step
FAQ
Was ist Unit Testing in Agile?

Unit Testing in Agile bezieht sich auf das Testen einzelner Einheiten oder Komponenten von Software isoliert, um sicherzustellen, dass sie korrekt funktionieren und die spezifizierten Anforderungen erfüllen. In der agilen Entwicklung wird Unit Testing in der Regel von Entwicklern als Teil des Codierungsprozesses durchgeführt, oft unter Verwendung von Test-driven Development (TDD)-Praktiken. Unit Tests konzentrieren sich darauf, die kleinsten testbaren Teile des Codes, wie Funktionen, Methoden oder Klassen, ohne Abhängigkeiten von externen Systemen oder Ressourcen zu testen. Diese Tests werden automatisiert und häufig während des gesamten Entwicklungszyklus ausgeführt, um Fehler frühzeitig zu identifizieren und die Codequalität zu erhalten.

Wie führt man Unit Testing durch, mit Beispielen?

Unit Testing beinhaltet das Schreiben automatisierter Tests, um das Verhalten einzelner Einheiten oder Komponenten des Codes isoliert zu überprüfen. Hier ist ein schrittweises Beispiel, wie man Unit Testing mit einer einfachen JavaScript-Funktion durchführt: Angenommen, wir haben eine Funktion „add“, die zwei Zahlen addiert:

function add(a, b) {
return a + b;
}

Nun werden wir Unit Tests für diese Funktion unter Verwendung eines Test-Frameworks wie Jest erstellen:

1. Einrichtung der Testumgebung: Installieren Sie Jest mit npm oder yarn:

npm install –save-dev jest

2. Schreiben von Testfällen: Erstellen Sie eine Testdatei, z. B. „add.test.js“, und schreiben Sie Testfälle für die „add“-Funktion:

const add = require(‚./add‘);

describe(‚add function‘, () => {
test(‚adds 1 + 2 to equal 3‘, () => {
expect(add(1, 2)).toBe(3);
});

test(‚adds -1 + 5 to equal 4‘, () => {
expect(add(-1, 5)).toBe(4);
});

// Weitere Testfälle hinzufügen, wenn nötig
});

3. Tests ausführen: Führen Sie die Tests mit Jest aus:

npx jest

Jest wird die Testfälle ausführen und Rückmeldung darüber geben, ob sie bestanden oder fehlgeschlagen sind.

4. Ergebnisse überprüfen: Überprüfen Sie die Testergebnisse, um sicherzustellen, dass die „add“-Funktion wie erwartet unter verschiedenen Szenarien funktioniert. Durch Befolgung dieser Schritte können Sie Unit Testing für die „add“-Funktion durchführen, um deren Korrektheit zu überprüfen und sicherzustellen, dass sie die erwartete Ausgabe für verschiedene Eingabewerte produziert.

Was sind Unit-Tests?

Beim Unit-Testing werden die kleinstmöglichen Codeabschnitte getestet, bevor der Build überhaupt zur regulären Qualitätssicherung übergeben wird. Es hilft den Entwicklern, Probleme zu erkennen und sofort zu lösen, noch bevor sie den Testern vorgelegt werden. Unit-Tests werden in der Regel von den Entwicklern geschrieben, was Zeit spart, da die Qualitätssicherung nicht in die Vorabtests einbezogen wird.

Was ist ein Unit-Testing-Tool?

Es gibt keine herausragenden Tools, speziell für Unit-Tests. Solche Tests werden in der Codeumgebung erstellt.

Was sind die Arten von Unit-Tests?

Unit-Tests können entweder manuell oder automatisiert durchgeführt werden. Manuelle Tests regen die Entwickler dazu an, über ihre Herangehensweise an den Code nachzudenken, und auf diese Weise können sie sowohl saubereren Code schreiben als auch Probleme erkennen. Automatisierte Tests sind hilfreich, um Fehler in großem Umfang zu finden.

Wer wird die Einheitstests durchführen?

Sie möchten, dass die Entwickler Unit-Tests durchführen, da der Hauptzweck darin besteht, Probleme zu beheben, bevor der Code an die Qualitätssicherung geschickt wird. Je nach Fachwissen und Arbeitsbelastung des Entwicklers können QS-Spezialisten in die Erstellung von Unit-Tests einbezogen werden.

closed icon