Erfahren Sie, wie die Continuous Quality Platform von Parasoft dabei hilft, Testumgebungen zu steuern und zu verwalten, um zuverlässig hochwertige Software zu liefern. Für Demo registrieren >>
Die meisten Entwicklungsteams sind sich einig, dass Unit-Tests, obwohl sie es nicht mögen, in der Tat äußerst wertvoll sind. Trotz der vielen Tools, die bei der manuellen Testerstellung helfen, erfordert das Erstellen und Verwalten von Komponententests immer noch viel manuellen, zeitaufwändigen und oft nervenaufreibenden Aufwand, bevor einem Test Geschäftslogik hinzugefügt wird. Daher führen Entwicklungsteams trotz der Absicht, großartige Unit-Tests durchzuführen, in der Regel die erforderliche Mindestmenge an Unit-Tests durch oder überspringen sie insgesamt.
Eine kürzlich durchgeführte Kundenumfrage ergab, etwas erwartet, dass Testerstellung, Mocking/Isolierung und Wartung Schlüsselprobleme sind, die dem Erfolg von Unit-Tests im Wege stehen. Abbildung 1 zeigt die Ergebnisse dieser Umfrage und zeigt die wichtigsten Bedenken, mit denen sich Entwickler identifizieren Unit-Tests in Java.
Abbildung 1: Die Umfrageergebnisse zeigen wichtige Problembereiche (Prozent), die sich aus Unit-Tests ergeben.
Um diese Hauptprobleme anzugehen, können wir uns automatisierten Softwaretests zuwenden. In diesem Blog zeige ich Ihnen, wie man es benutzt Parasoft Jtest Automatisierung der Testausführung und Datenerfassung sowie automatische Erstellung von Komponententests, um Zeit und Energie bei der Testerstellung zu sparen. Parasoft Jtest's Technologie zur automatischen Erstellung von Komponententests Richtet das Testframework ein, instanziiert Objekte und konfiguriert Mocks für geeignete Objekte und Methodenaufrufe, die von der zu testenden Methode verwendet werden. Es werden regelmäßige JUnits erstellt, mit denen die alltägliche Arbeit erledigt wird, sodass sich Entwickler darauf konzentrieren können, menschliche Intelligenz und Logik auf ihre Tests anzuwenden.
Unit-Tests sind iterativ und in agilen Prozessen haben Unit-Tests eine gute Erfolgsbilanz bei der Verbesserung der Projektergebnisse. Und natürlich ist es erwiesen, dass Tests zu einem früheren Zeitpunkt im Lebenszyklus der beste Weg sind, um teure und zeitaufwändige Fehler auf Systemebene später zu erkennen und zu beseitigen. Im Folgenden sind einige der wichtigsten Vorteile von Unit-Tests aufgeführt:
Ungeachtet dieser Vorteile haben Entwickler trotz des Wunsches nach besseren Ergebnissen immer noch Probleme mit Unit-Tests. Diese Kämpfe, die auch durch die obigen Umfrageergebnisse veranschaulicht werden, umfassen Folgendes:
Softwareentwicklungsteams müssen diese Probleme mit der Erstellung, Isolierung und Wartung von Tests angehen, wenn sie die Vorteile gründlicher Komponententests nutzen möchten. Die Lösung ist die Automatisierung. Parasoft Jtest's Tool zur automatischen Erstellung von Komponententests Bietet die Unterstützung, die für die Erstellung und Wartung von Tests erforderlich ist, während Sie in der IDE des Entwicklers arbeiten und vorhandene Test- und Verspottungs-Frameworks nutzen.
Das Erstellen von Komponententests ist mühsam und lenkt die Aufmerksamkeit von den interessanteren Teilen eines Projekts ab. Der Code selbst wiederholt sich und erfordert häufig genauso viel Aufwand wie der zu testende Code. Darüber hinaus muss der Unit-Test-Code selbst wie jeder Code repariert und debuggt werden. Glücklicherweise eignen sich Unit-Tests gut für die Automatisierung, und die automatische Anleitung durch ein Unit-Test-Tool kann die Testerstellung erheblich vereinfachen, das Debuggen und Korrigieren reduzieren und Ergebnisse und Metriken sammeln, um Projektanalysen zu unterstützen.
Viele IDEs bieten beispielsweise Assistenten zum Erstellen von Komponententests für JUnit an, bieten jedoch keinen „Inhalt“, um den Vorgang abzuschließen. Zusicherungen müssen manuell definiert werden, und wenn Spott-Frameworks verwendet werden, ist ein erheblicher Teil der manuellen Codierung erforderlich. Stattdessen bietet Parasoft Jtest kontextsensitive Echtzeitunterstützung in der IDE des Entwicklers. Mit der automatischen Erstellung von Komponententests wird der „Inhalt“, der in einfachen Skelett-Komponententests fehlt, wie Sie schnell und effizient abgeschlossen Nutzen Sie Ihr Unit-Test-Tool um Folgendes durchzuführen:
Schauen wir uns ein Beispiel an, um dies zu beheben. Hier, Parasoft JtestDer Unit Test Assistant wird mit einer IDE aufgerufen, um parametrisierte Tests zu erstellen:
Das Tool erstellt den folgenden Unit-Test-Code. Zu diesem Zeitpunkt vervollständigt der Entwickler die Parameter nach Bedarf:
Um Testfälle für verschiedene Parameterwerte zu erstellen, bietet der Unit Test Assistant von Parasoft Jtest einen Testfall-Assistenten:
Und du bist weg.
Unit-Tests implizieren die Isolierung des zu testenden Objekts, was bei vielen Abhängigkeiten einen angemessenen Arbeitsaufwand erfordert. Auch bei spöttischen Frameworks wie Mockito or PowerMockEs ist immer noch eine erhebliche manuelle Codierung erforderlich. Mit einem automatisierten Testassistenten-Tool können Sie Abhängigkeiten erkennen und die für das Framework erforderlichen Details automatisch eingeben.
Das Tool selbst analysiert den zu testenden Code, erkennt automatisch Abhängigkeiten und gibt Empfehlungen an den Entwickler.
Hier führen wir beispielsweise den folgenden Komponententest der Klasse IWorkspaceClass aus:
Abhängigkeiten werden zur Laufzeit erkannt, und das Tool empfiehlt, die gefundenen Abhängigkeiten zu verspotten:
Wenn Sie mit dem Tool „Mock It“ auswählen, wird beim Unit-Test der erforderliche Verspottungscode generiert. Sobald dieser Code generiert wurde, kann er angepasst werden, um bei Bedarf die richtige Logik darzustellen. Durch die automatische Erkennung von Abhängigkeiten und die anschließende Erstellung von Verspottungscode wird der manuelle und möglicherweise fehleranfällige Codierungsaufwand für das Verspotten von Objekten erheblich reduziert.
Die Wartung von Testsuiten überlappt einen Großteil der für die Testerstellung erforderlichen Arbeit, z. B. das Erstellen neuer Tests, das Ändern von Tests an die zugrunde liegende Logik, das Verspotten von Abhängigkeiten, das Ausführen von Tests und das Überprüfen. Die Unterstützung durch den Unit Test Assistant von Parasoft Jtest während der Testwartung ist ebenso wertvoll wie während der Erstellung, da er ein aktualisiertes Feedback zu den Ergebnissen der Laufzeitanalyse liefert, die während der Testausführung erfasst wurden. Beispielsweise wird zur Laufzeit eine neue Abhängigkeit in einem zu testenden Objekt erkannt, und das Tool fordert den Entwickler auf, damit umzugehen.
Ebenso wichtig ist in dieser Phase die Sicherstellung, dass die Aussagen weiterhin gültig sind. Der Parasoft Jtest Unit Test Assistant bietet Empfehlungen, mit denen Änderungen im Code erkannt und Zusicherungen aktualisiert werden können, um die neue Geschäftslogik widerzuspiegeln.
Java-Entwickler, die bereits Unit-Tests durchführen, verwenden wahrscheinlich JUnit und möglicherweise ein Assertion-Framework für ihr Projekt, z. B. Mockito oder PowerMock. Testautomatisierungstools müssen diese vorhandenen Tools nutzen, da durch das Ersetzen einer vorhandenen Investition in Unit-Tests Kosten- und Zeitvorteile vermieden würden. Der Unit Test Assistant von Parasoft Jtest lässt sich nahtlos in diese vorhandenen Tools integrieren, was von entscheidender Bedeutung ist.
Unit-Tests haben klare Vorteile, und obwohl die meisten Entwicklungsteams dies erkennen, werden viele durch die Bemühungen, Tests zu erstellen und zu warten, behindert. Die Verwendung automatisierter Unit-Testing-Technologien von Parasoft Jtest hilft Benutzern dabei, diese Hindernisse zu beseitigen und die alltäglichen Aspekte des Unit-Tests zu automatisieren, einschließlich Erstellung, Isolierung, Verspottung und Wartung. Um die Adoption zu beschleunigen, Parasoft Jtest nutzt die vorhandenen Investitionen des Entwicklungsteams in Test- und Verspottungs-Frameworks und gibt dem Entwickler Zeit zurück, während die Qualität des Produkts wiederhergestellt wird.
Kapil ist Produktmanager bei Parasoft und konzentriert sich auf Parasoft Jtest. Kapil hatte verschiedene technische Positionen inne, die vom Softwareentwickler bis zum Entwicklungsleiter reichten, bevor er zum Produktmanagement wechselte.