Wie Sie am besten testen von Java-code?
Ich arbeite seit über ein vergleichsweise großes system, auf meine eigene, und es ist meine erste Zeit auf einer großen Anlage(die sich mit 200+ Kanäle von Informationen gleichzeitig). Ich weiß, wie Sie Junit zu testen Sie jede Methode, und wie man die test-Randbedingungen. Aber trotzdem, für den system-test, die ich brauche, um zu testen, all die Schnittstellen und wohl auch so einigen stress, sowie testen (vielleicht gibt es andere Dinge zu tun, aber ich weiß nicht, was Sie sind). Ich bin Total neu in der Welt des Tests, und geben Sie mir bitte einige Anregungen oder zeigen Sie mir einige Informationen darüber, wie ein guter code, der tester würde das system testen.
PS: 2 spezifische Fragen, die ich habe sind:
wie zu testen private Funktionen?
wie Sie testen Schnittstellen und Nebenwirkungen vermeiden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sind zwei Websites, die helfen könnten:
Die erste ist eine Liste von open-source-Java-tools. Viele der tools sind addons JUnit, die es ermöglichen, entweder einfacher Tests oder Tests auf einer höheren Integrationsebene.
Abhängig von Ihrem system, manchmal JUnit wird die Arbeit für system-tests, aber die Struktur der Prüfung kann unterschiedlich sein.
Als für die privaten Methoden, überprüfen diese Frage (und die Frage, die es sich bezieht).
Kann man nicht testen-Schnittstellen (da gibt es kein Verhalten), aber Sie können erstellen Sie eine abstrakte Basis-test Klassen für die Tests, die Implementierungen einer Schnittstelle, Folgen Sie seinen Vertrag.
EDIT: Auch, wenn Sie nicht bereits haben, unit-tests, check-out Working Effectivly with Legacy Code; es ist ein muss für Prüf-code, der nicht gut für Tests.
Mocking ist ein guter Weg, um in der Lage sein zu simulieren, system-tests in unit-Tests; durch Austausch (spöttisch) die Ressourcen, auf die von der anderen Komponente abhängig ist, können Sie durch ausführen von unit-Tests in einer "system-ähnliche" Umgebung, ohne dass das gesamte system konstruiert, es zu tun.
Als zu Ihren konkreten Fragen: in der Regel sollten Sie nicht mit unit-Tests zu testen private Funktionen; wenn Sie sind privat, Sie sind private der Klasse. Wenn Sie brauchen, um etwas testen, testen Sie eine öffentliche Methode, die verwendet, dass die private Methode, etwas zu tun. Vermeidung von Nebenwirkungen, die potenziell problematische erfolgt am besten entweder über eine komplette Testumgebung (die können leicht abgewischt werden wieder zu einem "jungfräulichen" Zustand) oder mit Spott, wie oben beschrieben. Und testen der Schnittstellen erfolgt durch die, sowie, die Prüfung der interface-Methoden.
Erstens, wenn Sie bereits über ein großes system, dass keine unit-tests, und Sie planen auf hinzufügen, dann lassen Sie mich Ihnen Allgemeine Ratschläge.
Beibehalten das system und mit ihm arbeiten, werden Sie wahrscheinlich bereits wissen, die Bereiche des Systems, die meist buggiest, die dazu neigen, sich Häufig ändern und die eher nicht sehr viel ändern. Wenn Sie nicht, können Sie immer sehen, die durch die source-control-Protokolle (Sie sind mit Hilfe der source-control, richtig?) finden Sie heraus, wo die meisten Korrekturen und änderungen konzentriert werden. Konzentrieren Ihren Testaufwand auf diese Klassen und Methoden. Es ist eine Allgemeine Regel genannt 80/20 Regel, die für eine ganze Reihe von Dingen, dies ist einer von Ihnen.
Er sagt, dass, etwa im Durchschnitt, Sie sollten in der Lage sein zu decken 80 Prozent der beanstandeten Fälle mit 20% der Arbeit. Das heißt, durch das schreiben von tests für nur 20% des Codes, können Sie wahrscheinlich fangen 80% der bugs und Regressionen. Das ist, weil die meisten der fragilen code, Häufig geänderte code und das Schlimmste fehlerhaften code macht nur 20% der Codebasis. In der Tat, es kann sogar noch weniger.
Sollten Sie verwenden, junit, dies zu tun, und Sie sollten so etwas wie JMock oder einige andere mocking-library, um sicherzustellen, dass Sie testen in isolation. Für Systemtests/Integrationstests, das heißt, zu testen, während Sie zusammen arbeiten, kann ich nur empfehlen,FitNesse. Ich habe gute Erfahrungen gesammelt in der Vergangenheit. Es ermöglicht Ihnen, schreiben Sie Ihren test in einen web-browser mithilfe einer einfachen Tisch-layouts, wo man leicht definieren Sie Ihre Eingaben und die erwarteten Ergebnisse. Alles, was Sie tun müssen, ist schreiben Sie eine kleine backing-Klasse genannt, eine Vorrichtung, mit der Erstellung der Komponenten.
Private Funktionen getestet werden, wenn die öffentlichen Funktionen, die Sie nennen. Das testen der öffentlichen Funktion kümmert sich nur, dass das Ergebnis korrekt ist.
Beim Umgang mit API (für andere Pakete oder URLS oder sogar zu Datei/Netzwerk/Datenbank), sollten Sie verspotten Sie. Ein guter unit-test ausgeführt werden soll in wenigen Millisekunden, nicht Sekunden. Spott ist die einzige Möglichkeit, das zu tun. Es bedeutet, dass Fehler zwischen den Paketen beigelegt werden können, mit einem viel einfacher, als logische Fehler auf der funktionalen Ebene. Für Java easymock ist eine sehr gute mocking framework.
Können Sie einen Blick auf diese Liste : Tools für Regressionstests /test-Automatisierung von Datenbank-zentrierten java-Anwendung? für eine Liste von interessanten tools.
Als Sie scheinen bereits verwenden Junit intensiv es bedeutet, dass Sie bereits bei "test-infected", das ist ein guter Punkt...
In meiner persönlichen Erfahrung, ist die schwierigste zu verwaltende Daten. Ich meine, dass die Steuerung sehr akut die Daten agaisnt die die tests sind runned.
Die Liste der tools gegeben, bevor Sie nützlich sind. Aus persönlicher Erfahrung, das sind die tools, die ich nützlich finde:
Mocking - Mockito ist eine hervorragende Umsetzung und hat clevere Techniken, um sicherzustellen, dass Sie nur zu verspotten, die Methoden, die Sie wirklich interessieren.
Datenbank testen - DBunit ist indespensible für den Aufbau von Testdaten und überprüfen von Interaktionen mit der Datenbank.
Stress-Tests - Jmeter - sobald Sie sehen, bestanden die etwas klobig-gui-dies ist ein sehr robustes Werkzeug für den Aufbau von Szenarien und ausführen von stress-tests.
Als für den Allgemeinen Ansatz beginnen, indem Sie versuchen, um die tests laufen für die üblichen "happy paths" durch Ihre Anwendung kann die basis für Regressions-Tests und performance-Tests. Sobald dies abgeschlossen ist können Sie beginnen, Sonderfälle und Fehler-Szenarien.
Obwohl dieses Niveau der Prüfung sollte sein, die Sekundär zu gute unit-Tests.
Glück!