Zuhause Persönliche Finanzen Mit JUnit - dummies

Mit JUnit - dummies

Inhaltsverzeichnis:

Video: JAVA Leistungskurs #3 - Testen mit JUnit [Tutorial] 2024

Video: JAVA Leistungskurs #3 - Testen mit JUnit [Tutorial] 2024
Anonim

JUnit ist ein standardisiertes Framework zum Testen von Java-Einheiten (dh Java-Klassen). JUnit kann automatisiert werden, um einige Tests zu vermeiden.

Stellen Sie sich vor, Sie haben einen Aufzählungstyp mit drei Werten erstellt: GRÜN, GELB und ROT. Listing 1 enthält den Code:

Listing 1

public enum Signalfarbe {GRÜN, GELB, ROT}

Eine Ampel hat einen Zustand (ein ausgefallener Name für die Farbe der Ampel).

öffentliche Klasse TrafficLight {Signalfarbe Zustand = Signalfarbe. ROT;

Wenn Sie den aktuellen Status der Ampel kennen, können Sie entscheiden, welcher der nächste Status der Ampel sein wird.

public void nextState () {Schalter (Zustand) {Fall ROT: Zustand = Signalfarbe. GRÜN; Unterbrechung; Fall GELB: Zustand = Signalfarbe. ROT; Unterbrechung; Fall GRÜN: Zustand = Signalfarbe. GELB; Unterbrechung; Standard: state = Signalfarbe. ROT; break;}}

Sie können den Status der Ampel auch mehrmals ändern:

public void change (int numberOfTimes) {für (int i = 0; i 

Alles zusammengefügt, hast du die TrafficLight-Klasse in Listing 2.

Listing 2

öffentliche Klasse TrafficLight {SignalColor state = SignalColor. ROT; public void nextState () {Schalter (Zustand) {Fall ROT: Zustand = Signalfarbe. GRÜN; Unterbrechung; Fall GELB: Zustand = Signalfarbe. ROT; Unterbrechung; Fall GRÜN: Zustand = Signalfarbe. GELB; Unterbrechung; Standard: state = Signalfarbe. ROT; break;}} public void änderung (int numberOfTimes) {für (int i = 0; i 

Früher haben Sie möglicherweise Code geschrieben und weitere Klassen erstellt, rufen Sie den nextState auf und ändern Sie die Methoden in Listing 2. Dann, nach einigen Monaten der Programmierung, würden Sie eine Pause einlegen, um Ihre Arbeit zu testen.

Und was für eine Überraschung! Ihre Tests würden kläglich scheitern! Sie sollten das Testen nie länger als ein oder zwei Tage hinauszögern. Testen Sie früh und testen Sie oft!

Eine Philosophie zum Testen besagt, dass Sie jeden Codeblock testen sollten, sobald Sie ihn geschrieben haben. Natürlich klingt der Ausdruck "Stück Code" nicht sehr wissenschaftlich. Es würde nicht helfen, wenn Entwickler herumlaufen und über die "Brocken von Code-Tests" sprechen, die sie heute Nachmittag gemacht haben. Es ist besser, jeden Code-Block als -Einheit zu bezeichnen und Entwickler dazu zu bringen, über Unit-Tests zu sprechen.

Die am häufigsten verwendete Testeinheit ist eine Klasse. Daher testet ein typischer Java-Entwickler jede Klasse, sobald der Code der Klasse geschrieben ist.

Wie geht es Ihnen beim Testen einer Klasse? Ein Anfänger könnte die TrafficLight-Klasse testen, indem er eine zusätzliche Klasse schreibt - eine Klasse, die eine Hauptmethode enthält. Die Hauptmethode erstellt eine Instanz von TrafficLight, ruft nextState auf und ändert Methoden und zeigt die Ergebnisse an.Der Anfänger untersucht die Ergebnisse und vergleicht sie mit einigen erwarteten Werten.

Nach dem Schreiben der Hauptmethoden für Dutzende, Hunderte oder sogar Tausende von Klassen, wird der Anfänger (jetzt ein vollwertiger Entwickler) der Testroutine überdrüssig und sucht nach Wegen, um das Testverfahren zu automatisieren. Müde oder nicht, ein Entwickler könnte versuchen, die handkodierten Tests eines anderen Entwicklers zu entschlüsseln. Ohne irgendwelche Standards oder Richtlinien für die Konstruktion von Tests zu haben, kann das Lesen und Verstehen der Tests anderer Entwickler schwierig und mühsam sein.

So kommt JUnit zur Rettung!..

Um herauszufinden, wie Eclipse die Verwendung von JUnit automatisiert, gehen Sie wie folgt vor:

  1. Erstellen Sie ein Eclipse-Projekt mit den Listen 1 und 2.

  2. Klicken Sie in Windows mit der rechten Maustaste auf die TrafficLight des Paket-Explorers. Java Zweig. Auf einem Mac klicken Sie bei gedrückter Taste "ctrl" auf die TrafficLight des Paket-Explorers. Java Zweig.

    Ein Kontextmenü wird angezeigt.

  3. Wählen Sie im Kontextmenü Neu → JUnit Testfall.

    Daraufhin wird das Dialogfeld New JUnit Test Case angezeigt.

  4. Klicken Sie unten im Dialogfeld "Neuer JUnit-Testfall" auf "Weiter".

    Daraufhin wird die zweite Seite des Dialogfelds New JUnit Test Case angezeigt. Die zweite Seite listet Methoden auf, die (direkt oder indirekt) zur TrafficLight-Klasse gehören.

  5. Setzen Sie ein Häkchen in die Checkbox "Ampel".

    Infolgedessen platziert Eclipse Häkchen in den Kontrollkästchen nextState () und change (int) .

  6. Klicken Sie unten im Dialogfeld "New JUnit Test Case" auf Fertig stellen.

    JUnit gehört formal nicht zu Java. Stattdessen gibt es eigene Klassen und Methoden, mit denen Sie Tests für Ihren Code erstellen können. Nachdem Sie auf Fertig stellen geklickt haben, werden Sie von Eclipse gefragt, ob Sie die JUnit-Klassen und -Methoden als Teil Ihres Projekts einfügen möchten.

  7. Wählen Sie die folgende Aktion aus, und fügen Sie die JUnit 4-Bibliothek zum Erstellungspfad hinzu. Klicken Sie dann auf OK.

    Eclipse schließt die Dialogfelder und Ihr Projekt hat einen brandneuen TrafficLightTest. Java-Datei. Der Code der Datei wird in Listing 3 angezeigt.

    Der Code in Listing 3 enthält zwei Tests, und beide Tests enthalten Aufrufe einer unangenehm klingenden Fail-Methode. Eclipse möchte, dass Sie Code hinzufügen, damit diese Tests bestanden werden.

  8. Entfernen Sie die Aufrufe der Fail-Methode. Anstelle der Aufrufe der fehlgeschlagenen Methode geben Sie den in Listing 4 fett gedruckten Code ein.

  9. Klicken Sie im Paket-Explorer mit der rechten Maustaste (unter Windows) bzw. bei gedrückter Ctrl-Taste (auf einem Mac) auf den TrafficLightTest. Java Zweig. Wählen Sie im angezeigten Kontextmenü Ausführen als → JUnit-Test.

    Eclipse könnte mehr als eine Art von JUnit-Test-Framework auf Lager haben. Wenn dies der Fall ist, wird möglicherweise ein Dialogfeld wie das folgende angezeigt. Wenn Sie dies tun, wählen Sie den Eclipse JUnit Launcher aus und klicken Sie dann auf OK.

    Infolgedessen führt Eclipse Ihren TrafficLightTest aus. Java-Programm. Eclipse zeigt das Ergebnis des Laufs vor seinem eigenen Paket-Explorer an. Das Ergebnis zeigt keine Fehler und keine Fehler. Wütend!

Listing 3

statische Organisation importieren. Junit. Behaupten. *; Importorg. Junit. Prüfung; öffentliche Klasse TrafficLightTest {@Test public void testNextState () {fehlgeschlagen ("Noch nicht implementiert");} @Test public void testChange () {fail ("Noch nicht implementiert");}}

Listing 4

import statische org.Junit. Behaupten. *; Importorg. Junit. Prüfung; öffentliche Klasse TrafficLightTest {@Test public void testNextState () { TrafficLight light = new TrafficLight (); assertEquals (Signalfarbe. ROT, Lichtzustand); Licht. nextState (); assertEquals (Signalfarbe. GRÜN, Lichtzustand); Licht. nextState (); assertEquals (Signalfarbe. GELB, Lichtzustand); Licht. nextState (); assertEquals (Signalfarbe. ROT, Lichtzustand); } @Test public void testChange () { TrafficLight light = neues TrafficLight (); Licht. Änderung (5); assertEquals (Signalfarbe. GELB, Lichtzustand); }}

Wenn Sie Run As → JUnit Test auswählen, sucht Eclipse nicht nach einer Hauptmethode. Stattdessen sucht Eclipse nach Methoden, die mit @Test und anderen solchen Dingen beginnen. Eclipse führt jede der @Test-Methoden aus.

Dinge wie @Test sind Java Annotationen .

Listing 4 enthält zwei @Test-Methoden: testNextState und testChange. Die testNextState-Methode testet die Methode "TrafficLight nextState". In ähnlicher Weise werden die Muskeln der TrafficLight-Änderungsmethode durch die testChange-Methode gewölbt.

Betrachten Sie den Code in der testNextState-Methode. Die testNextState-Methode ruft wiederholt die nextState-Methode der TrafficLight-Klasse und die assertEquals-Methode von JUnit auf. Die assertEquals-Methode verwendet zwei Parameter: einen erwarteten Wert und einen tatsächlichen Wert.

  • Im obersten AssertEquals-Aufruf ist der erwartete Wert SignalColor. ROT. Sie erwarten, dass die Ampel ROT ist, weil Sie in Listing 2 den Status des Lichts mit dem Wert SignalColor initialisieren. ROT.

  • Im obersten AssertEquals-Aufruf ist der tatsächliche Wert hell. state (die Farbe, die tatsächlich in der Statusvariablen der Ampel gespeichert ist).

Wenn der tatsächliche Wert dem erwarteten Wert entspricht, wird der Aufruf von assertEquals übergeben und JUnit setzt die Ausführung der Anweisungen in der testNextState-Methode fort.

Wenn der tatsächliche Wert jedoch vom erwarteten Wert abweicht, schlägt assertEquals fehl und das Ergebnis des Laufs zeigt den Fehler an. Betrachten Sie zum Beispiel, was passiert, wenn Sie den erwarteten Wert im ersten Aufruf von assertEquals in Listing 4 ändern:

@Test public void testNextState () {TrafficLight light = new TrafficLight (); assertEquals (Signalfarbe. GELB, Lichtzustand);

Unmittelbar nach ihrer Konstruktion ist die Farbe einer Ampel ROT, nicht GELB. Die testNextState-Methode enthält also eine falsche Assertion und das Ergebnis von Run As → JUnit sieht aus wie die schlechte Report-Karte eines Kindes.

Die Tatsache, dass testNextState vor testChange in Listing 4 steht, garantiert nicht , dass JUnit testNextState vor der Ausführung von testChange ausführen wird. Wenn Sie über drei @Test-Methoden verfügen, führt JUnit sie möglicherweise von oben nach unten, von unten nach oben, von der mittleren zur obersten zur untersten Methode oder in beliebiger Reihenfolge aus. JUnit könnte sogar mitten in einem Test anhalten, um Teile eines anderen Tests auszuführen. Deshalb sollten Sie niemals Annahmen über das Ergebnis eines Tests machen, wenn Sie einen anderen Test schreiben.

Möglicherweise möchten Sie bestimmte Anweisungen ausführen, bevor einer der Tests beginnt.Wenn Sie dies tun, setzen Sie diese Anweisungen in eine Methode mit dem Namen setUp, und führen Sie diese Methode mit einer Annotation @Before vor. (Siehe das setUp () Kontrollkästchen in der Abbildung bei Schritt 3 in Listing 2, oben.)

Hier sind die Neuigkeiten: Nicht alle assertEquals Methoden sind gleich! Stellen Sie sich vor, Sie fügen dem Code Ihres Projekts eine Treiberklasse hinzu. "Treiberklasse" bedeutet nicht einen Druckertreiber oder einen Rammtreiber. Es bedeutet eine Person, die ein Auto fährt - ein Auto, das sich Ihrer Ampel nähert. Für Details siehe Listing 5.

Listing 5

public class Treiber {öffentliche Doppelgeschwindigkeit (TrafficLight light) {switch (Lichtzustand) {case RED: return 0. 0; Fall GELB: Rückkehr 10. 0; GRÜN: Rückkehr 30. 0; Standard: Rückgabe 0. 0;}}}

Wenn das Licht rot ist, ist die Geschwindigkeit des Fahrers 0. 0. Wenn das Licht gelb ist, verlangsamt sich das Auto zu einem sicheren 10. 0. Wenn das Licht grün ist, das Auto fährt mit einer Geschwindigkeit von 30. 0.

(In diesem Beispiel spielen die Geschwindigkeitseinheiten keine Rolle. Sie könnten Meilen pro Stunde, Kilometer pro Stunde oder was auch immer sein. Der einzige Weg, den es Auto ist in Boston oder New York City, in diesem Fall sollte die Geschwindigkeit für GELB viel höher sein als die Geschwindigkeit für GRÜN, und die Geschwindigkeit für ROT sollte nicht 0 sein. Treiberklasse, befolgen Sie die Schritte 1 bis 9, die zuvor in diesem Artikel aufgeführt sind, aber stellen Sie sicher, dass Sie die folgenden Änderungen vornehmen:

Klicken Sie in Schritt 2 mit der rechten Maustaste oder mit gedrückter ctrl-Taste auf den Treiber. Java-Zweig anstelle der TrafficLight. Java Zweig.

  • Setzen Sie in Schritt 5 ein Häkchen in den Treiberzweig.

  • Entfernen Sie in Schritt 8 die Fail-Methodenaufrufe, um die in Listing 6 gezeigte DriverTest-Klasse zu erstellen. (Der von Ihnen eingegebene Code wird fett angezeigt.)

  • Listing 6

statische org importieren. Junit. Behaupten. *; Importorg. Junit. Prüfung; öffentliche Klasse DriverTest {@Test public void testVelocity () {

TrafficLight light = neues TrafficLight (); Licht. Änderung (7); Treiber Treiber = neuer Treiber (); assertEquals (30.0, Treibergeschwindigkeit (light), 0. 1); }} Wenn alles gut geht, ist der JUnit-Test mit Bravour bestanden. (Um genau zu sein, der JUnit passt mit der Farbe Grün!) Das Laufen von DriverTest ist also nicht neu oder aufregend. Was aufregend ist, ist der Aufruf von AssertEquals in Listing 6.

Wenn Sie zwei Doppelwerte in einem Java-Programm vergleichen, haben Sie kein Recht, Gleichberechtigung zu erwarten. Das heißt, einer der Doppelwerte könnte 30. 000000000 sein, während der andere Doppelwert näher an 30 liegt. 000000001. Ein Computer hat nur 64 Bits, um jeden Doppelwert zu speichern, und Ungenauigkeiten schleichen sich hier und da ein. In JUnit hat also die assertEquals-Methode zum Vergleichen von Doppelwerten einen dritten Parameter. Der dritte Parameter repräsentiert den Spielraum.

In Listing 6 behauptet die Anweisung

assertEquals (30.0, Treibergeschwindigkeit (light), 0. 1);

sagt folgendes: "Bestätigen Sie den tatsächlichen Wert des Treibers. Geschwindigkeit (Licht) liegt innerhalb von 0,1 des erwarteten Werts 30. 0 Wenn ja, geht die Aussage über. Wenn nicht, schlägt die Assertion fehl. "

Wenn Sie assertEquals für doppelte Werte aufrufen, kann die Auswahl einer guten Fehlertoleranz schwierig sein.Diese Zahlen veranschaulichen die Dinge, die schief gehen können.

Hier ist Ihre Fehlerquote zu klein.

Dort ist Ihre Fehlerquote zu groß.

Glücklicherweise ist in diesem DriverTest-Beispiel der Spielraum 0. 1 eine sehr sichere Wette. Hier ist der Grund:

Wenn der assertEquals-Test fehlschlägt, schlägt er um mehr als 0 fehl. 1.

  • Fehler bedeutet, einen Treiber zu haben. Geschwindigkeit (Licht) -Wert wie 0 oder 10. 0.

    Wenn in diesem Beispiel der assertEquals-Test bestanden wird, repräsentiert er wahrscheinlich eine vollständige "on-the-nose" -Gleichheit.

  • Der Wert des Treibers. Geschwindigkeit (Licht) kommt direkt von der Rückkehr 30. 0 Code in Listing 5. Keine Arithmetik ist beteiligt. Also der Wert des Fahrers. Geschwindigkeit (Licht) und der erwartete 30. 0-Wert sollte genau derselbe sein (oder fast genau derselbe).

Mit JUnit - dummies

Die Wahl des Herausgebers

Tipps für die Auswahl von Feldtypen in Access 2013 - Dummies

Tipps für die Auswahl von Feldtypen in Access 2013 - Dummies

Beim Entwerfen einer Datenbank in Access 2013 Entscheiden Sie, welcher Typ jedes Feld sein wird. Access bietet 12 Feldtypen, aus denen Sie auswählen können. Wählen Sie den Feldtyp aus, der am besten die Daten beschreibt, die Sie im Feld speichern möchten, und das funktioniert für den Analysetyp, den Sie benötigen, um die ...

Nützliche Funktionen in Access 2007 - Dummies

Nützliche Funktionen in Access 2007 - Dummies

Obwohl Access 2007 über mehrere integrierte Funktionen verfügt, dürfen Sie nicht mehr verwenden. als ein paar von ihnen in Ihren Berichten. Dennoch, wenn Sie nicht wissen, dass sie verfügbar sind, könnten Sie viele der Funktionen vermissen, die Sie wirklich nützlich finden könnten. Obwohl diese Liste weit davon entfernt ist, umfassend zu sein, zeigt diese Tabelle eine Reihe von Funktionen ...

Sichern Ihrer Access 2003-Datenbank als MDE-Datei - Dummies

Sichern Ihrer Access 2003-Datenbank als MDE-Datei - Dummies

Wenn Sie eine Access 2003-Datenbank erstellen. andere Leute - besonders Leute, die ein wenig ratlos über Access sind - Sie können Ihre Datenbank sperren, um andere Benutzer daran zu hindern, Änderungen vorzunehmen, die sie möglicherweise beschädigen. Sie können Sicherheit in Form von Benutzernamen und Passwörtern hinzufügen, aber ...

Die Wahl des Herausgebers

Ruby Datentypen und Variablen - Dummys

Ruby Datentypen und Variablen - Dummys

Variablen in Ruby werden mit alphanumerischen Zeichen und dem Unterstrich (_) bezeichnet. und kann nicht mit einer Zahl oder einem Großbuchstaben beginnen. Variablen, wie in der Algebra, sind Schlüsselwörter, die verwendet werden, um Datenwerte für eine spätere Verwendung zu speichern. Obwohl sich die in einer Variablen gespeicherten Daten ändern können, ist der Variablenname immer derselbe. Denken Sie an ...

Mit Array und Hash Built-in und verwandten Methoden - Dummies

Mit Array und Hash Built-in und verwandten Methoden - Dummies

Ruby hat viele integrierte Klassen, aber vielleicht die nützlichsten Objekte für die Speicherung anderer Daten sind die Container-Klassen Array und Hash. Sie können viel Zeit beim Codieren sparen, wenn Sie sich daran erinnern, dass jede dieser Klassen viele nützliche Methoden für den Zugriff und die Manipulation ihrer Inhalte hat. Array-Grundlagen Verwenden Sie Arrays für Listen ...

Wie man Scratch-Grafiken in andere Anwendungen exportiert - Dummies

Wie man Scratch-Grafiken in andere Anwendungen exportiert - Dummies

Scratch-Benutzer können Grafiken für andere Anwendungen entwerfen und exportieren wie Microsoft Word und PowerPoint. Eine einfach zu findende Schaltfläche (aus Datei hochladen) ermöglicht es Benutzern, Grafiken in Scratch zu importieren, aber viele Benutzer wissen nicht, wie sie Grafiken auf einem Computer speichern und die Bilder wie andere Grafikdateien exportieren können. Öffnen Sie ein Scratch-Projekt. ...

Die Wahl des Herausgebers

Hinzufügen von Fußnoten und Endnoten in Word 2016 - dummies

Hinzufügen von Fußnoten und Endnoten in Word 2016 - dummies

Fußnoten und Endnoten in Word 2016 enthalten Bonusinformationen, eine Klarstellung oder beiseite, um Text auf einer Seite zu ergänzen. Jede ist im Text durch eine hochgestellte Zahl oder einen Buchstaben gekennzeichnet1. 1 Siehe? Es klappt! Der Unterschied zwischen einer Fußnote und einer Endnote liegt in der Platzierung: Eine Fußnote wird unten angezeigt ...

Wie man Datum und Uhrzeit in Word 2013 Dokument hinzufügt - Dummies

Wie man Datum und Uhrzeit in Word 2013 Dokument hinzufügt - Dummies

Sie haben wahrscheinlich Leute Sie möchten das aktuelle Datum und die aktuelle Uhrzeit kennen oder möchten einfach das Datum oder die Uhrzeit oder beide in Ihr Word 2013-Dokument einfügen. Bis auf wenige Ausnahmen sind Zeitreisende die einzigen, die sich für das laufende Jahr erkundigen. Aber vielleicht brauchen Sie es in Ihrem Dokument ...

Wie man Datum und Uhrzeit zu einem Word 2010 Dokument hinzufügt - Dummies

Wie man Datum und Uhrzeit zu einem Word 2010 Dokument hinzufügt - Dummies

Sie wahrscheinlich haben Leute, die das aktuelle Datum und die Uhrzeit in Ihrem Word 2010-Dokument kennen möchten, oder vielleicht möchten Sie nur das Datum oder die Uhrzeit (oder beides) in Ihr Dokument einfügen. Word hat viele Tricks, um es möglich zu machen. Festhalten des aktuellen Datums oder der aktuellen Uhrzeit in einem Word-Dokument Abgesehen von der Suche ...