Wat is JUnit?
cherami
JUnit is een open source Java toetsingskader gebruikt voor het schrijven en herhaalbare tests uit te voeren.Hij is een systeem van xUnit unit testing raamwerk voor een instantie (voor Java-taal).Het omvat de volgende functies:
1, voor het testen van de verwachte resultaten van de stelling (bewering)
2, voor het delen van gemeenschappelijke testgegevens testtools
3, voor het gemak van de organisatie en de werking van de test suite tests
4, afbeeldingen en tekst te testen runner
JUnit is oorspronkelijk ontwikkeld door Erich Gamma (GoF One) en Kent Beck (xp en een van de pioniers refactoren) voorbereid.
Moet worden opgemerkt dat junit algemeen wordt gebruikt voor unit testing, en daarom moet de interne structuur van de code te testen (de zogenaamde white-box testen) begrijpen, de andere is xp junit programmering en refactoring (refactoren) werd sterk aanbevolengereedschap, automatische unit testen omdat de omstandigheden sterk kan de efficiëntie van de ontwikkeling te vergroten, maar in feite is het schrijven van test-code kost veel tijd en inspanning, dan de voordelen van het gebruik van dit spul Waar is het?Ik denk dat is dit:
1, voor xp programmering, pleit voor de het schrijven van tests voor het schrijven van code, die kan je dwingen om goed na te denken voordat het schrijven van de code in de code (methoden) van de functie en de logica, of schrijf de code instabiel is, dan moet je met behoud van detest code en de eigenlijke code, zal dit de werklast aanzienlijk zal toenemen.Daarom is in xp programmering, het basisproces is dit: het idee - "schrijf test code -" om code te schrijven - "test, en het schrijven van tests en het schrijven van code zijn incrementeel, en schrijf een kleine test die code in de voorbereiding van toekomstigeAls er problemen zijn gevonden meer blokken kunnen worden getraceerd naar het probleem, vermindering van de moeilijkheidsgraad van de fout terug te keren
2, voor de wederopbouw, de voordelen en xp programmering is vergelijkbaar, omdat de reconstructie is ook nodig om een beetje te testen, minder tijdrovend te wijten aan fouten terug te veranderen.
3, voor niet-twee bovengenoemde situaties, wanneer we het juiste gebruik van schrijf junit test te ontwikkelen is noodzakelijk, omdat de algemene test moeten we ook om code te schrijven, mag u geen gebruik maken van de originele junit, als je gebruik maakt junit, maar ook tegenInterface (methoden) voor te bereiden test code zal de toekomstige onderhoudswerkzaamheden, zoals veranderingen in de methode na te verminderen (dit is gelijk aan de wederopbouw te werken.)Junit stelling omdat er een andere functie, indien de testresultaten niet aan de proef zal ons vertellen die niet voorbij, waarom, en als de vorige algemene praktijk is het schrijven van een aantal test-code is te kijken naar hun productie, en vervolgens te bepalen door zelf de resultaten van het gebruik van de juistemet behulp van junit voordeel is dat dit resultaat juist is om te oordelen dat aan te vullen, hoeven we alleen te kijken naar het het recht ons te vertellen of de resultaten kunnen in het algemeen, zal sterk de efficiëntie te verbeteren.
JUnit de slag
cherami om
Het installeren van JUnit
De installatie is zeer eenvoudig, eerst de volgende adres aan een nieuwe zip-pakket te downloaden:
http://download.sourceforge.net/junit/
Na gedownload, extract naar uw favoriete map, is de veronderstelling JUNIT_HOME, dan JUNIT_HOME junit.jar het kader van het pakket toegevoegd aan uw systeem CLASSPATH omgevingsvariabele, voor de IDE-omgeving, de noodzaak voor een intensiever gebruik van de junit projectlib, zijn verschillende IDE-instellingen hebben verschillende instellingen, waar niet veel te zeggen.
Hoe te JUnit gebruiken om testen te schrijven?
Het eenvoudigste voorbeeld:
1, een subklasse van testcase:
pakket junitfaq;
import java.util .*;
import junit.framework .*;
public class SimpleTest breidt testcase {
openbare SimpleTest (String naam) {
super (naam);
}
2, schrijf een testmethode gelden de verwachte resultaten:
public void testEmptyCollection () {
Collectie = new ArrayList ();
assertTrue (collection.isEmpty ());
}
Opmerking: JUnit testaanpak wordt aanbevolen als het begin van de methode te testen, zodat deze methoden kunnen automatisch worden gevonden door het testen.
3, schrijf een suite () methode, die reflectie gebruikt om dynamisch creëren van een methode die alle testXxxx test suite bevat:
public static test suite () {
terug nieuwe testsuite (SimpleTest.class);
}
4, schrijf een main () methode om de tekst mode toestel om de werking van de test te vergemakkelijken uitvoeren:
public static void main (String args []) {
junit.textui.TestRunner.run (suite ());
}
}
5, uitvoeren van de test:
Draaien in de tekst mode:
java junitfaq.SimpleTest
Door middel van de test resultaten zijn:
.
Tijd: 0
OK (1 tests)
Tijd zei dat de test op het aantal kleine punten, en als het testen blijkt OK.Anders, de kleine punt achter de gemarkeerde F, geeft aan dat de test mislukt.
Elk van de testresultaten moet OK, dus in om de test uit te leggen is geslaagd, als dit niet lukt zal de informatie direct volg de aanwijzingen herzien.
JUnit testrapport indien niet succesvol is, zal het onderscheid tussen storingen (defecten) en fouten (fouten).Falen is de code in uw methode niet door te beweren, en de fout wordt veroorzaakt door abnormale code, zoals ArrayIndexOutOfBoundsException.
Grafisch uit te voeren:
java junit.swingui.TestRunner junitfaq.SimpleTest
De testresultaten via de grafische interface van de groene balk in een deel.
Dit zijn de meest simpele test sample, de eigenlijke test, testen we de functie van een klasse is vaak noodzakelijk om een aantal gemeenschappelijke operaties uit te voeren, na de voltooiing van de vernietiging van de benodigde middelen (zoals netwerkverbindingen, database connecties, in de buurt van open bestandenenz.), testcase klasse voorziet ons van een setup methode en Teardown methoden, setup methode om uw inhoud in de voorbereiding van de testcase subklasse testmethode voor elke testXxxx zal draaien, en Teardown methoden van de inhoud na het einde van elke methode zal worden uitgevoerd testXxxx.De gedeelde initialisatie code alleen, maar elimineert ook het potentieel tussen elke test code interactie.
JUnit best practices
Martin Fowler zei: "Als je probeert af te drukken enkele informatie of debuggen van een expressie, een aantal test code aan de traditionele methoden te vervangen schrijven." Op het eerste, zult u merken dat u altijd wilt wat nieuwe armatuur te creëren, en de testprogrammering lijkt om u te vertragen.Kort daarna, echter, zult u merken dat u dezelfde Fixture herhalen, en de nieuwe test is meestal alleen gaat om een nieuwe testmethode toe te voegen.
U kunt schrijven veel van de test code, maar je al snel merken dat je slechts een klein deel van de test is echt nuttig te overwegen.Je moet testen, is de test die zal mislukken, waarvan u denkt dat niet die tests mislukken, of denk je dat ze moet de test van het succes mislukken.
Zoals we al eerder testen is een proces zonder onderbreking.Als je eenmaal een test, moet u ervoor zorgen dat hun werk is om uw werk te testen door het toevoegen van nieuwe code.Lopen niet om de paar dagen of de laatste testdag, moet u deze test code uit te voeren.Deze investering is zeer klein, maar het kan werken om ervoor te zorgen dat u een betrouwbare code te krijgen.Verminder uw rework tarief, zal je meer tijd om te schrijven werkende code.
Denk niet dat de druk, niet te testen code te schrijven.Schrijven in plaats test code zal geleidelijk uw stress te verminderen, moeten worden getest door code te schrijven, heb je het exacte gedrag van het begrip van de klasse.U zal sneller worden om code te schrijven om efficiënt te werken.
Hier zijn een aantal specifieke vaardigheden in het schrijven van test-code of good practices:
1. Gebruik niet de testcase constructor initialiseert Wedstrijd, maar gebruik maken van de setup () en Teardown () methode.
2. Vertrouw niet op of gaan ervan uit dat de volgorde van de tests, omdat de JUnit testmethode met behulp van vector opgeslagen.Dus verschillende platformen zullen worden in een andere volgorde, te verwijderen uit de Vector testmethoden.
3. Om de bijwerkingen van de voorbereiding van een testcase te voorkomen.Bijvoorbeeld: Als de daaropvolgende tests hangt af van de specifieke transactie gegevens niet overleggen transactie gegevens.Gewoon roll op.
4. Als erfenis van een test-klasse, herinner me om de superklasse setup () en Teardown () methode.
5. Zal het testen van de code en werkende code samen, terwijl ze tegelijkertijd samen te stellen en te actualiseren.(Met behulp van de junit Ant had om de taak te ondersteunen.)
6. Test klassen en testmethoden moet een consistente naamgeving.Als de werkende klasse met de naam test om de test class naam te vormen.
7. Om ervoor te zorgen dat de test is onafhankelijk van tijd, niet baseren op verouderde gegevens gebruikt voor het testen.Resulteerde in het daaropvolgende onderhoud van het proces is moeilijk te reproduceren de test.
8. Als je het schrijven van software voor de internationale markt, aan de voorbereiding van de test overwegen wanneer het internationale factoren.Native Locale niet alleen voor het testen.
9. Zoveel mogelijk het gebruik van JUnit bieden om te beweren / fail-methode en de methode van exception handling kan de code meer beknopt.
10. De test is zo klein mogelijk is, de uitvoering van de snelheid.
Combinatie van JUnit en mier
cherami Links
mier heeft twee doelstelling: junit en junitreport
Voer alle testcases, en het genereren van HTML-geformatteerde rapport
Het volgende doen:
1. ANT_HOMElib directory op de junit.jar
. 2 Wijzig build.xml, voeg het volgende:
eigenschapterm name="report" value="report" / target name="junitreport" depends="clean, compile" junit printsummary = "on" fork = "echte "haltonfailure =" false "failureproperty =" tests.failed "showoutput =" true " classpath refid="myclasspath"/ formatter type="xml"/ batchtest todir = "$ {} rapport" fileset dir="${build}" Include name="**/*Test.*"/ /bestandsset / batchtest / junit junitreport todir="${report}" fileset dir="${report}" omvatten: naam = "TEST-*. xml "/ / bestandsset report format="frames" todir="${report}"/ / junitreport mislukken als =" tests.failed "; --------------------------------------------------------- een of meer tests mislukt, controleert u het rapport voor detail ... --------------------------------------------------------- / fail / target
Uitvoeren van deze doelstelling, zal mier loopt elke testcase
Directory in het rapport is er een veel TEST *. xml en een aantal pagina's
Open het rapport directory index.html zie je een zeer intuïtieve test rapporten in een oogopslag.