spock tutorial testing with spock
Praktisk Spock-handledningsserie: Testning med Spock-ramverk och Groovy-programmeringsspråk
Denna serie handledning skulle helt berika din kunskap om Spock Framework.
Enkla och tydliga exempel har inkluderats i varje handledning för att du enkelt ska förstå konceptet.
Gör dig redo att lära dig Spock gratis !!
Lista över alla Spock-handledning i denna serie:
Lär dig Spock i detalj med hjälp av denna Intensive Spock Training-serie för nybörjare och erfarna proffs.
Handledning # | Länk |
---|---|
Handledning nr 1 | Introduktion till Spock och Groovy |
Handledning nr 2 | Skrivenhetstester med Spock |
Handledning nr 3 | Parameteriserad testning med Spock |
Handledning nr 4 | Spock Mocking och Stubbing |
Handledning nr 5 | Spock med Selen Functional Test |
Självstudie nr 6 | Spock Intervju Frågor |
Översikt över handledningar i Spock-serien
Tutorial_Num | Vad du kommer att lära dig |
---|---|
Handledning nr 1 | Introduktion till Spock och Groovy Denna introduktionshandledning förklarar allt om Spock, som är ett testramverk som är byggt ovanpå Groovy. Det verkställer BDD i grunden och säkerställer att alla tester skrivna med ramverket följer BDD-konventionerna. |
Handledning nr 2 | Skrivenhetstester med Spock I den här handledningen går vi igenom alla detaljer / steg som krävs för att komma igång med enhetstestning i Spock tillsammans med enkla exempel. |
Handledning nr 3 | Parameteriserad testning med Spock Denna handledning kommer tydligt att förklara vad parametrerade tester är och hur du kan använda de inbyggda funktionerna i Spock för att uppnå datadriven testning. |
Handledning nr 4 | Spock Mocking och Stubbing Denna Spock-handledning kommer att förklara i detalj om Mocking and Stubbing som är en av de viktigaste byggstenarna i omfattande enhetstester. |
Handledning nr 5 | Spock med Selen Functional Test Lär dig hur du använder Spock för integrationstestning (som restjänster) och för funktionstestning från denna informativa handledning. Till exempel integrera Spock med selen. |
Självstudie nr 6 | Spock Intervju Frågor Denna handledning innehåller en lista över de mest populära Spock-intervjufrågorna med svar och exempel. Dessa frågor skulle verkligen leda någon att rensa spockintervjun framgångsrikt vid första försöket. |
Vad du kommer att lära dig:
- Vad är Spock?
- Titta på Spock and Groovy Video Tutorial
- Vad är Groovy?
- Komma igång med Spock
- Anatomy of a Spock Specification
- Spec-blockbeskrivningar
- Viktiga tips
- Slutsats
- Rekommenderad läsning
Vad är Spock?
Spock är ett testramverk som är byggt ovanpå Groovy. Det verkställer BDD i grunden och säkerställer att alla tester skrivna med ramverket följer BDD-konventionerna.
Till skillnad från JUnit har Spock också sina egna Mocking- och test-dubbla bibliotek samt fullt stöd för parametrerade testscenarier.
Det beror på detta kompletta paket i sig, Spock-specifikationerna är superläsbara och uttrycksfulla och som ett resultat av vilket de gör testet för att uppnå mer och mer av vad det var avsett för att minska klichépannan.
Trots alla dessa coola funktioner kan Spock-tester köras med befintliga JUnit-testlöpare och befintliga kommandorads- / byggverktyg som Maven och Gradle, vilket gör det ännu mer övertygande att använda. I ett nötskal kombinerar Spock alla de bra funktionerna i JUnit, BDD (ramar som JBehave & Gurka ) samt hån.
Vi tar en titt på några exempel som illustrerar var och en av dessa funktioner i de ytterligare avsnitten.
Titta på Spock and Groovy Video Tutorial
Vad är Groovy?
Groovy är ett skriptspråk för Java-plattformen.
Några av de viktigaste funktionerna i groovy inkluderar:
# 1) Den kan användas som dynamiskt skriven (där en variabel kan innehålla vilken typ av data som helst) såväl som statiskt skriven (som tvingar kraftigt skrivna konstruktioner på variabler som innehåller data).
Exempel : Vi har tilldelat array och karta på samma sätt och internt bestämmer groovy typen och hanterar den på lämpligt sätt.
def listType = (1,2,3) def mapType = ('red':2,'green':3) println(listType.getClass()) println(mapType.getClass())
Utgången från ovanstående kodexempel är:
klass java.util.ArrayList
klass java.util.LinkedHashMap
#två) All giltig Java-kod är också en giltig Groovy-kod (men inte tvärtom eftersom den också har ytterligare funktioner).
# 3) Andra funktioner inkluderar metaprogrammering, stängning, statisk typkontroll etc.
# 4) Till skillnad från Java semikolon är valfria i groovy och de primitiva typerna betraktas som objekt som standard.
Eftersom denna handledningsserie är mer fokuserad på Spock lär vi oss bara de Groovy-funktionerna som är viktiga för att skapa Spock-baserade testspecifikationer.
Komma igång med Spock
För att komma igång, låt oss se vilka bibliotek som krävs beroende på vilket byggsystem du använder (t.ex. Gradle / maven).
För Maven-baserade projekt
Maven-projekt måste inkludera ett plugin för att sammanställa Gradle-kod samt ett surefire-plugin för att kunna köra groovy-baserade specifikationer. Förutom denna groovy & Spock, beroenden bör också läggas till.
org.codehaus.gmavenplus gmavenplus-plugin 1.5 testCompile maven-surefire-plugin 2.18.1 false **/*Spec.java org.spockframework spock-core 1.3-groovy-2.5 test
För Gradle-baserade projekt
För en exempelgradefil enligt nedan är de viktigaste kraven gradeprogram-plugin och beroenden för groovy för kod och test.
plugins { id 'java' id 'groovy' } repositories { mavenCentral() } dependencies { compile 'org.codehaus.groovy:groovy-all:2.4.8' testCompile 'org.spockframework:spock-core:1.1-groovy-2.4' }
Anatomy of a Spock Specification
Spock-tester kan skrivas för alla språk som körs på JVM. Det betyder att även om din applikationskod finns i Java eller Scala eller Kotlin etc. kan du ändå välja att skriva dina enhet / integrationstest i Spock (över andra som JUnit, JBehave, etc.).
Spock-testklasser kallas 'Specifikationer' (liknar specifikationer i BDD-världen) och du kan utöka klassen 'Specification' för Spock-ramverket. (Specifikation är basklassen för Spock-ramverket).
Varje Spec-fil kan innehålla flera tester (liknar en JUnit-testklassfil) och varje test kan valfritt innehålla BDD-blocken, dvs. ges, när och då. Detta liknar andra BDD-ramar, där var och en av dessa avsnitt kan korreleras till Arranger, Act och Assert-avsnitt i JUnit-testerna.
Nedan följer ett blockschema som visar hierarkin för Spec och tester.
Låt oss se hur en provspecifikation ser ut i koden:
import spock.lang.Specification class SampleSpec extends Specification { def 'check case-insensitive equality of 2 strings'() { given: String str1 = 'hello' String str2 = 'HELLO' when: str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: str1 == str2 } def 'check addition of 2 numbers'() { given: int input1 = 10 int input2 = 25 when: int result = input1 + input2 then: result == 35 } }
Få viktiga punkter att notera här:
# 1) Titta på namnet på testscenarierna (strängen efter def-nyckelordet): 'kontrollera skiftlägeskänslig jämlikhet med två strängar'. Dessa är vanliga engelska strängar och detta gör testnamnen ganska läsbara och ger en verklig känsla att testa vad det uppnår.
Jämför det med det vanliga JUnit-testet där testnamnet ser ut som ungefär c.
caseEquality_withValidInput_shouldBeEqual()
#två) Angivet, när och då block motsvarar Arranger, Act och Assert. Av dessa tittar man på det dåvarande (eller påstå-blocket) vilket innebär jämställdhetspåstående och undviker all pannkodskod associerad med påståenden.
Exempel , Ett påstående i JUnit skulle ha sett ut som visas nedan:
@Test public void compareStrings_withValidInput_shouldReturnSuccess() { // Arrange String str1 = 'hello'; String str2 = 'HELLO'; // Act str1 = str1.toLowerCase(); str2 = str2.toLowerCase(); // Assert Assert.assertEquals(str1,str2); }
Som du kan se av ovanstående gör Spock-testerna att testerna ser mindre uttömmande ut och undviker all pannkodskod i påståenden (och installation etc.)
Spec-blockbeskrivningar
För vart och ett av de enskilda blocken i ett test kan du välja att tillhandahålla blockbeskrivning som en sträng för att ge mer information om det block som körs. Detta är användbart för att ge en mer detaljerad struktur för testet.
Låt oss se ett exempel nedan:
def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
Viktiga tips
# 1) Alla block i en Spock-baserad specifikation är valfria. Om det är närvarande ska 'när' och 'då' visas tillsammans i följd.
#två) Om du bara behöver validera ett påstående (och du inte har något behov av när block) kan du använda ' förvänta ”Blockera. Den kan användas för att hävda förhandsförhållanden även före när och sedan blockerar (och kan användas flera gånger i ett test).
Låt oss se ett exempel på användning av förväntningar som att validera förhandsvillkoret innan 'när' -blocket körs.
def 'check addition of 2 numbers'() { given: int input1 = 10 int input2 = 25 expect: input1.getClass().toString() == 'class java.lang.Integer' input2.getClass().toString() == 'class java.lang.Integer' input1 = Integer.MIN_VALUE when: int result = input1 + input2 then: result == 35 }
Som visas ovan försöker förväntningsblocket att hävda klassvärdet för inmatningsfälten såväl som värdet på en av ingångarna för att ligga inom intervallet.
Slutsats
I denna Spock-handledning har vi täckt grunderna i Groovy-programmeringsspråk, tillsammans med anatomi eller grundläggande byggstenar i en Spock-specifikation.
Vi skapade ett provprojekt med nödvändiga beroenden för att kunna skriva groovy-baserade Spock-specifikationer och skrev en provspecifikation.
I de andra självstudierna i denna serie kommer vi att fördjupa oss i funktionerna som tillhandahålls av Spock-ramverket och lära känna hur de använder groovy språk för att skapa rena och läsbara testspecifikationer.
hur man fångar buggar under byggautomatisering
Håll dig uppdaterad med våra kommande Spock-handledning för att lära dig mer om testarmaturer, påståenden och rapportering i Spock.
Rekommenderad läsning
- Skrivenhetstester med Spock Framework
- Spock intervjufrågor med svar (mest populära)
- Spock för integration och funktionstestning med selen
- Spock Mocking and Stubbing (Exempel med videotutorials)
- Datadriven eller parametrerad testning med Spock Framework
- Fördjupade förmörkningsövningar för nybörjare
- Java Reflection Tutorial med exempel
- Gurkselen-handledning: Gurka Java Selen WebDriver-integration