writing unit tests with spock framework
Unit-tests schrijven met Spock Framework: testopstellingen, beweringen en rapportage
In deze Volledige beginnershandleiding op Spock , een korte Inleiding op Spock Framework en Groovy-programmering werd gegeven in onze vorige tutorial.
In deze tutorial zullen we alle details / stappen doorlopen die nodig zijn om aan de slag te gaan Testen van een eenheid in Spock.
Eenvoudigheidshalve gaan we een eenvoudige rekenmachinetoepassing testen die verschillende methoden heeft, zoals optellen, aftrekken, vermenigvuldigen, delen, enz., Die allemaal integer-parameters accepteren en een integer-uitvoer retourneren.
Wat je leert:
- Unit testen met Spock Video Tutorial
- Beginnen
- Trefwoord 'def'
- De levenscyclus van een Spock-specificatie
- Spock-beweringen
- Rapporteren
- Gevolgtrekking
- Aanbevolen literatuur
Unit testen met Spock Video Tutorial
Beginnen
Net als alle andere frameworks voor het testen van eenheden, kan ook Spock worden gebruikt om scenario's / testcases te schrijven voor een applicatie die wordt getest. We zullen proberen de verschillende functies van het Spock-framework te vergelijken en te contrasteren met de bestaande / bekende frameworks zoals JUnit
Trefwoord 'def'
Laten we eerst proberen het sleutelwoord 'def' van Groovy in het kort te begrijpen. Het def sleutelwoord wordt gebruikt om het type-def te definiëren en kan worden gebruikt om zowel een functie als een veld / variabele te declareren.
'Def' wordt over het algemeen gebruikt als we het type van een veld of het retourtype van een methode niet willen beperken. Laten we eens kijken naar enkele voorbeelden van def-sleutelwoorden in een hippe klasse en al zijn geldige toepassingen.
De levenscyclus van een Spock-specificatie
Spock-specificatie bij uitvoering zoekt naar alle gedefinieerde tests en voert ze een voor een uit. Er zijn echter enkele andere functionaliteiten / features die door Spock worden geboden om tests minder redundant en leesbaarder te maken.
Laten we hieronder enkele functies bespreken:
Inputs / variabelen definiëren als onderdeel van Spec
Overweeg om meerdere tests uit te voeren die allemaal dezelfde invoerwaarden gebruiken. Een manier zou zijn om de invoerwaarden in elke test afzonderlijk te initialiseren, anders kunnen we de velden direct op specificatieniveau definiëren en ervoor zorgen dat vóór elke test de velden worden geïnitialiseerd en beschikbaar zijn voor de test die wordt uitgevoerd.
Laten we een voorbeeld bekijken voor onze rekenmachinetoepassingsklasse
We zullen de invoergegevens op specificatieniveau definiëren, zodat deze beschikbaar zullen zijn met de beginwaarden voor alle tests die in de specificatie aanwezig zijn.
In dit codevoorbeeld kunt u zien dat we input1, input2, de te testen applicatie en het resultaat op specificatieniveau hebben gedefinieerd. Dit zorgt ervoor dat elke keer dat er een test wordt uitgevoerd vanuit de specificatiebestanden, en de geïnitialiseerde velden worden doorgegeven aan die test. Dit elimineert inderdaad de noodzaak om elke keer tests met invoerwaarden op te zetten.
Testopstellingen
Net als bij de meeste frameworks voor het testen van eenheden, biedt Spock ook setup- en opschoningsmethoden voor het uitvoeren van speciale logica / taken bij specifieke levenscyclusgebeurtenissen van testuitvoering.
setupSpec & cleanupSpec
Deze methoden worden eenmaal aangeroepen voor elke Spec-uitvoering en worden respectievelijk voor en na de testuitvoering aangeroepen. Deze zijn vergelijkbaar met @ Voor klas en @ Na de les annotaties van JUnit.
installatie en opruimen
Deze methoden worden aangeroepen voor en na het uitvoeren van elke test in de specificatie.
Deze hooks zijn de juiste plaats voor elke logica / stuk code die u voor en na het uitvoeren van de test wilt uitvoeren. Bijvoorbeeld , Bij het opschonen kunt u een code schrijven om de databaseverbinding (indien aanwezig) die tijdens de test werd gebruikt, te sluiten.
Deze zijn te vergelijken met @ BeforeTest en @ AfterTest annotaties in de JUnit.
Laten we een voorbeeld van deze armaturen bekijken in onze rekenmachinetest.
Als de bovenstaande testopstellingcode wordt toegevoegd aan een specificatie met 4 tests, is de uitvoer als volgt:
Spock-beweringen
De beweringen in Spock worden power assert genoemd (en het werd later door groovy overgenomen nadat het door Spock was geïntroduceerd). De beweringen van Spock bieden veel diagnostische uitzonderingen in het geval van mislukte beweringen.
Men kan gemakkelijk achterhalen wat er mis is gegaan door simpelweg naar de storingsdiagnose te kijken in plaats van uitgebreid Bewering: fouten in JUnit en andere frameworks.
Laten we dit proberen te begrijpen met een voorbeeld en het vergelijken met JUnit
beste gratis firewall voor windows xp
We zullen werken met een eenvoudige test die de gelijkheid van de string controleert en zien welke diagnostische gegevens worden gegenereerd in het geval van een mislukte bewering.
Spock-test
JUnit-test
Spock-uitvoer
JUnit-uitvoer
Zoals u hierboven kunt afleiden, heeft de diagnostische informatie van Spock betere details en is deze gebruiksvriendelijker in vergelijking met andere frameworks zoals JUnit.
Beweringstips en -trucs
Meerdere elementen tegelijk beweren - Spock biedt verschillende afkortingen voor beweringen en een daarvan is de '*' -notatie die het mogelijk maakt de elementen op de lijst te bevestigen.
Laten we dit begrijpen met een voorbeeld:
Beschouw een CityInfo-klasse met cityName en populatie als de velden. We zullen een Spock-test schrijven om de namen van steden op de gegeven lijst te bevestigen.
Laten we de test nu bekijken:
retourneert een array van een methode in java
Zoals getoond in de steno van de bewering hierboven, zou je de hele lijst kunnen valideren met behulp van het trefwoord '*'.
Laten we ook eens kijken hoe een storing eruit zou hebben gezien. Ik verwijder de naam van een stad uit de bovenstaande bewering.
U kunt zien dat de diagnostische informatie over het mislukken van een bewering rijk en gemakkelijk te begrijpen is.
Gebruikmakend van de sluitingsparameter - elke ().
Laten we eens kijken hoe we de sluitingsparameter met de naam every () kunnen gebruiken om een bewering toe te voegen voor elk element van een lijst of verzameling. Laten we in hetzelfde voorbeeld proberen een bewering toe te voegen die de bevolking van elke stad valideert als de gegeven invoer> 50 is.
Uitzonderingen geldend maken
Uitzonderingen kunnen worden beweerd om in het 'toen' -blok te worden gegooid (wat betekent dat a wanneer het blok ook vereist is). Het detail van de uitzondering kan worden vastgesteld door de gegenereerde uitzondering aan een veld toe te wijzen en de vereiste eigenschappen van de gegenereerde uitzondering te bevestigen.
Laten we dezelfde CityInfo-klasse gebruiken en een methode definiëren die een uitzondering genereert en er een test voor schrijven.
Laten we nu naar de test kijken:
Rapporteren
Om mooie en gedetailleerde HTML-gebaseerde rapporten te genereren, zijn er bibliotheken beschikbaar die kunnen worden toegevoegd aan het buildbestand en nu wanneer de tests worden uitgevoerd tijdens de build (of door directe uitvoering), wordt een gedetailleerd html-rapport gegenereerd in de uitvoermap.
Om de gegenereerde testrapporten te krijgen, voegt u de volgende bibliotheken toe aan het build.gradle-bestand (en ook voor het Maven pom.xml-bestand).
Bouw nu het project en voer de tests uit door alle tests uit te voeren in de map 'test' of door ' geleidelijke schone test
Je kunt openen index.html -bestand om een samengevat rapport te krijgen voor alle Spock-specificaties die beschikbaar waren om te worden uitgevoerd.
Als u het gedetailleerde rapport voor een specifieke specificatie wilt zien, klik dan op de specificatie in de bovenstaande lijst en u kunt een gedetailleerd rapport zien van zowel mislukkingen als successen.
Gevolgtrekking
In deze zelfstudie hebben we de basisprincipes van het testen van eenheden met Spock Framework behandeld. We hebben de verschillende manieren en afkortingen gezien voor het schrijven van beweringen en het soort rijke diagnostische informatie gegenereerd door het Spock-framework voor mislukte beweringen.
We hebben ook gekeken hoe we rustige, mooie HTML-gebaseerde rapporten konden genereren voor de Spock-tests die dezelfde gedetailleerde diagnostiek bevatten voor de uitgevoerde tests.
Onze aanstaande tutorial zal je in detail informeren over het schrijven van geparametriseerde tests met Spock !!
PREV-zelfstudie VOLGENDE zelfstudie
Aanbevolen literatuur
- Datagestuurd of geparametriseerd testen met Spock Framework
- Spock-interviewvragen met antwoorden (meest populair)
- Spock voor integratie en functioneel testen met selenium
- Spock Mocking and Stubbing (voorbeelden met videotutorials)
- Spock-zelfstudie: testen met Spock en Groovy
- Mockito-zelfstudie: Mockito-raamwerk voor bespotten bij het testen van eenheden
- De verschillen tussen unit-tests, integratietests en functionele tests
- Sleutel tot succesvolle unit-tests - Hoe ontwikkelaars hun eigen code testen?