spock tutorial testing with spock
Hands-on Spock tutorial-serie: Test med Spock framework og Groovy programmeringssprog
Denne række tutorials vil fuldstændigt berige din viden om Spock Framework.
Enkle og klare eksempler er inkluderet i hver tutorial for at gøre det let for dig at forstå konceptet.
Gør dig klar til at lære Spock gratis !!
Liste over alle Spock-vejledninger i denne serie:
Lær Spock i detaljer ved hjælp af denne Intensive Spock Training-serie for begyndere og erfarne fagfolk.
Vejledning # | Link |
---|---|
Vejledning nr. 1 | Introduktion til Spock og Groovy |
Tutorial # 2 | Skriveenhedstest med Spock |
Tutorial # 3 | Parametreret test med Spock |
Tutorial # 4 | Spock Mocking og stubbing |
Tutorial # 5 | Spock med selen funktionel test |
Tutorial # 6 | Spock Interview Spørgsmål |
Oversigt over vejledninger i Spock Series
Tutorial_Num | Hvad du vil lære |
---|---|
Vejledning nr. 1 | Introduktion til Spock og Groovy Denne introduktionsvejledning forklarer alt om Spock, som er en testramme, der er bygget oven på Groovy. Det håndhæver BDD i kernen og sikrer, at alle tests, der er skrevet ved hjælp af rammen, følger BDD-konventionerne. |
Tutorial # 2 | Skriveenhedstest med Spock I denne vejledning gennemgår vi alle de detaljer / trin, der er nødvendige for at komme i gang med enhedstest i Spock sammen med enkle eksempler. |
Tutorial # 3 | Parametreret test med Spock Denne tutorial forklarer tydeligt, hvad parametrerede tests er, og hvordan du kan udnytte de indbyggede funktioner i Spock til at opnå datadrevet test. |
Tutorial # 4 | Spock Mocking og stubbing Denne Spock-tutorial forklarer detaljeret om Mocking and Stubbing, som er en af de mest vigtige byggesten i omfattende enhedstests. |
Tutorial # 5 | Spock med selen funktionel test Lær hvordan du bruger Spock til integrationstest (som hviletjenester) og til funktionstest fra denne informative vejledning. For eksempel integrering af Spock med selen. |
Tutorial # 6 | Spock Interview Spørgsmål Denne vejledning indeholder en liste over de mest populære Spock Interview-spørgsmål med svar og eksempler. Disse spørgsmål vil faktisk lede nogen til at rydde spock-interviewet med succes ved første forsøg. |
Hvad du vil lære:
- Hvad er Spock?
- Se videoundervisningen i Spock and Groovy
- Hvad er Groovy?
- Kom godt i gang med Spock
- Anatomi af en Spock-specifikation
- Spec-blokbeskrivelser
- Vigtige tip
- Konklusion
- Anbefalet læsning
Hvad er Spock?
Spock er en testramme, der er bygget oven på Groovy. Det håndhæver BDD i kernen og sikrer, at alle tests, der er skrevet ved hjælp af rammen, følger BDD-konventionerne.
I modsætning til JUnit har Spock også sine egne Mocking- og test-dobbeltbiblioteker samt fuld support til parametriserede testscenarier.
Det er på grund af denne komplette pakke i sig selv, Spock-specifikationerne er superlæsbare og udtryksfulde, og som et resultat heraf udfører de testen for at opnå mere og mere af det, det var beregnet til at reducere kliché-kedelpladekoden.
På trods af alle disse seje funktioner kan Spock-test køres ved hjælp af den eksisterende JUnit-testløber og de eksisterende kommandolinje- / buildværktøjer som Maven og Gradle, hvilket gør det endnu mere overbevisende at bruge. I en nøddeskal kombinerer Spock alle de gode funktioner i JUnit, BDD (rammer som JBehave & Agurk ) samt spottende.
Vi vil se på et par eksempler, der illustrerer hver af disse funktioner i de yderligere afsnit.
Se videoundervisningen i Spock and Groovy
Hvad er Groovy?
Groovy er et script-sprog til Java-platformen.
Nogle af de vigtigste funktioner i groovy inkluderer:
# 1) Det kan bruges som dynamisk skrevet (hvor en variabel kan indeholde alle typer data) såvel som statisk skrevet (som håndhæver stærkt typede konstruktioner på variabler, der indeholder data).
Eksempel : Vi har tildelt array og kort på samme måde og internt bestemmer groovy typen og håndterer det passende.
def listType = (1,2,3) def mapType = ('red':2,'green':3) println(listType.getClass()) println(mapType.getClass())
Outputtet fra ovenstående kodeeksempel er:
klasse java.util.ArrayList
klasse java.util.LinkedHashMap
#to) Al gyldig Java-kode er også en gyldig Groovy-kode (men ikke omvendt, da den også har yderligere funktioner).
# 3) Andre funktioner inkluderer metaprogrammering, lukninger, kontrol af statisk type osv.
# 4) I modsætning til Java semikoloner er valgfri i groovy, og de primitive typer betragtes som standard som objekter.
Da denne tutorial-serie er mere fokuseret på Spock, lærer vi bare de Groovy-funktioner, der er vigtige for oprettelse af Spock-baserede testspecifikationer.
Kom godt i gang med Spock
For at komme i gang, lad os se, hvilke biblioteker der kræves afhængigt af hvilket build-system du bruger (f.eks. Gradle / maven).
Til Maven-baserede projekter
Maven-projekter skal indeholde et plugin til kompilering af Gradle-kode samt et surefire-plugin for at køre groovy-baserede specifikationer. Ud over denne groovy & Spock, afhængigheder skal også tilføjes.
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
Til Gradle-baserede projekter
For en prøve gradle-fil som nedenfor inkluderer de vigtigste krav gradle-plugin og afhængighederne for groovy til kode og 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' }
Anatomi af en Spock-specifikation
Spock-tests kan skrives til ethvert sprog, der kører på JVM. Dette betyder, at selvom din applikationskode er i Java eller Scala eller Kotlin osv., Kan du stadig vælge at skrive din enhed / integrationstest i Spock (over andre som JUnit, JBehave osv.).
Spock-testklasser kaldes 'Specifikationer' (svarer til specifikationer i BDD-verden), og du kan udvide klassen 'Specification' i Spock-rammen. (Specifikation er basisklassen i Spock-rammen).
Hver Spec-fil kan indeholde flere tests (svarende til en JUnit-testklassefil), og hver test kan valgfrit indeholde BDD-blokke, dvs. givet, hvornår og derefter. Dette svarer til andre BDD-rammer, hvor hver af disse sektioner kan korreleres med henholdsvis Arranger, Act og Assert-sektioner i JUnit-testene.
Nedenfor er et blokdiagram, der viser hierarkiet for Spec og tests.
Lad os se, hvordan en prøvespecifikation ser ud 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å vigtige punkter at bemærke her:
# 1) Se på navnet på testscenarierne (strengen efter def-nøgleordet): 'Kontroller store og små bogstaver med 2 store strenge'. Dette er almindelige engelske strenge, og dette gør testnavne ret læselige og giver en reel mening at teste, hvad den opnår.
Sammenlign det med den sædvanlige JUnit-test, hvor testnavnet vil se ud som noget c.
caseEquality_withValidInput_shouldBeEqual()
#to) Givet, hvornår og derefter blokke svarer til Arranger, Act og Assert. Ud af disse ser du på den daværende (eller hævderblok), som indebærer ligestillingspåstand og undgår al kedelpladekode, der er forbundet med påstande.
Eksempel , En påstand i JUnit ville have set ud som vist nedenfor:
@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 af ovenstående, får Spock-testene testene til at se mindre detaljerede ud samt undgå al kedelpladekode i påstande (og opsætning osv.)
Spec-blokbeskrivelser
For hver af de enkelte blokke i en test kan du vælge at angive blokbeskrivelse som en streng for at give flere detaljer om den blok, der bliver udført. Dette er nyttigt til at give en mere detaljeret struktur til testen.
Lad os se et eksempel nedenfor:
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 }
Vigtige tip
# 1) Alle blokke i en Spock-baseret spec er valgfri. Imidlertid, hvis til stede 'når' og 'derefter' skal vises sammen i rækkefølge.
#to) Hvis du bare har brug for at validere en påstand (og du ikke har brug for når blokering), kan du bruge ' forventer ”Blok. Det kan bruges til at hævde forudbetingelser, selv før hvornår og derefter blokke (og kan bruges flere gange i en test).
Lad os se en brugseksempel, der forventes som at validere præ-betingelsen, før vi udfører 'når' -blokken.
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 vist ovenfor forsøger forventningsblokken at hævde klasseværdien af inputfelterne såvel som værdien af en af inputene til at ligge inden for området.
Konklusion
I denne Spock-tutorial har vi dækket det grundlæggende i Groovy-programmeringssprog sammen med anatomi eller grundlæggende byggesten i en Spock-specifikation.
Vi oprettede et prøveprojekt med de krævede afhængigheder for at kunne skrive groovy-baserede Spock-specifikationer og skrev en prøvespecifikation.
I de øvrige tutorials i denne serie vil vi gå dybere ned i de funktioner, der leveres af Spock-rammen og lære, hvordan de bruger groovy sprog til at skabe rene og læsbare testspecifikationer.
gratis ssh-klient til Windows 10
Hold øje med vores kommende Spock-tutorials for at vide mere om testarmaturer, påstande og rapportering i Spock.
Anbefalet læsning
- Skrivningstest med Spock Framework
- Spock Interview-spørgsmål med svar (mest populære)
- Spock til integration og funktionel test med selen
- Spock Mocking og Stubbing (Eksempler med videotutorials)
- Datadrevet eller parametreret test med Spock Framework
- Dybdegående formørkelsesvejledninger til begyndere
- Java Reflection Tutorial med eksempler
- Agurk Selen Tutorial: Agurk Java Selen WebDriver Integration