spock tutorial testing with spock
Praktische Spock-Tutorial-Serie: Testen mit Spock Framework und Groovy Programming Language
Diese Reihe von Tutorials würde Ihr Wissen über Spock Framework vollständig bereichern.
In jedem Tutorial sind einfache und klare Beispiele enthalten, damit Sie das Konzept leichter verstehen.
Machen Sie sich bereit, Spock kostenlos zu lernen!
Liste aller Spock-Tutorials in dieser Reihe:
Lernen Sie Spock mit Hilfe dieser Intensiv-Spock-Trainingsreihe für Anfänger und erfahrene Profis im Detail.
Lernprogramm # | Verknüpfung |
---|---|
Tutorial # 1 | Einführung in Spock und Groovy |
Tutorial # 2 | Unit-Tests mit Spock schreiben |
Tutorial # 3 | Parametrisiertes Testen mit Spock |
Tutorial # 4 | Spock Mocking und Stubbing |
Tutorial # 5 | Spock mit Selen-Funktionstest |
Tutorial # 6 | Fragen zum Spock-Interview |
Übersicht der Tutorials in der Spock-Serie
Tutorial_Num | Was du lernen wirst |
---|---|
Tutorial # 1 | Einführung in Spock und Groovy In diesem Einführungs-Tutorial wird alles über Spock erklärt, ein Testframework, das auf Groovy aufbaut. Es erzwingt BDD im Kern und stellt sicher, dass alle mit dem Framework geschriebenen Tests den BDD-Konventionen entsprechen. |
Tutorial # 2 | Unit-Tests mit Spock schreiben In diesem Tutorial werden wir alle Details / Schritte durchgehen, die erforderlich sind, um mit Unit-Tests in Spock zu beginnen, sowie einfache Beispiele. |
Tutorial # 3 | Parametrisiertes Testen mit Spock In diesem Tutorial wird klar erklärt, was parametrisierte Tests sind und wie Sie die integrierten Funktionen von Spock nutzen können, um datengesteuerte Tests zu erzielen. |
Tutorial # 4 | Spock Mocking und Stubbing In diesem Spock-Tutorial werden Mocking und Stubbing ausführlich erläutert, die einer der wichtigsten Bausteine für umfangreiche Unit-Tests sind. |
Tutorial # 5 | Spock mit Selen-Funktionstest In diesem informativen Tutorial erfahren Sie, wie Sie Spock für Integrationstests (wie Rest Services) und für Funktionstests verwenden. Zum Beispiel Integration von Spock mit Selen. |
Tutorial # 6 | Fragen zum Spock-Interview Dieses Tutorial enthält eine Liste der beliebtesten Fragen zu Spock-Interviews mit Antworten und Beispielen. Diese Fragen würden in der Tat jeden dazu führen, das Spock-Interview beim ersten Versuch erfolgreich zu beenden. |
Was du lernen wirst:
- Was ist Spock?
- Sehen Sie sich das Spock and Groovy Video Tutorial an
- Was ist Groovy?
- Erste Schritte mit Spock
- Anatomie einer Spock-Spezifikation
- Beschreibung der Spezifikationsblöcke
- Wichtige Tipps
- Fazit
- Literatur-Empfehlungen
Was ist Spock?
Spock ist ein Testframework, das auf Groovy aufbaut. Es erzwingt BDD im Kern und stellt sicher, dass alle mit dem Framework geschriebenen Tests den BDD-Konventionen entsprechen.
Im Gegensatz zu JUnit verfügt Spock über eigene Mocking- und Test-Doppelbibliotheken sowie über vollständige Unterstützung für parametrisierte Testszenarien.
Aufgrund dieses Komplettpakets an sich sind die Spock-Spezifikationen sehr gut lesbar und ausdrucksstark und führen den Test durch, um mehr und mehr von dem zu erreichen, was zur Reduzierung des Klischeekodex gedacht war.
Trotz all dieser coolen Funktionen können Spock-Tests mit dem vorhandenen JUnit-Testläufer und den vorhandenen Befehlszeilen- / Build-Tools wie Maven und Gradle ausgeführt werden, was die Verwendung noch überzeugender macht. Kurz gesagt, Spock kombiniert alle guten Eigenschaften von JUnit, BDD (Frameworks wie JBehave & Gurke ) sowie verspotten.
Wir werden uns in den weiteren Abschnitten einige Beispiele ansehen, die jede dieser Funktionen veranschaulichen.
Sehen Sie sich das Spock and Groovy Video Tutorial an
Was ist Groovy?
Groovy ist eine Skriptsprache für die Java-Plattform.
Einige der Hauptmerkmale von Groovy sind:
# 1) Es kann sowohl dynamisch typisiert (wobei eine Variable jeden Datentyp enthalten kann) als auch statisch typisiert (wodurch stark typisierte Konstrukte für Variablen erzwungen werden, die Daten enthalten) verwendet werden.
Beispiel : Wir haben Array und Map auf die gleiche Weise zugewiesen und intern bestimmt groovy den Typ und behandelt ihn entsprechend.
def listType = (1,2,3) def mapType = ('red':2,'green':3) println(listType.getClass()) println(mapType.getClass())
Die Ausgabe des obigen Codebeispiels lautet:
Klasse java.util.ArrayList
Klasse java.util.LinkedHashMap
#zwei) Jeder gültige Java-Code ist ebenfalls ein gültiger Groovy-Code (aber nicht umgekehrt, da er auch zusätzliche Funktionen bietet).
#3) Weitere Funktionen sind Metaprogrammierung, Verschlüsse, statische Typprüfung usw.
# 4) nicht wie Java Semikolons sind in Groovy optional und die primitiven Typen werden standardmäßig als Objekte betrachtet.
Da sich diese Tutorial-Reihe mehr auf Spock konzentriert, lernen wir nur die Groovy-Funktionen kennen, die für die Erstellung von Spock-basierten Testspezifikationen unerlässlich sind.
Erste Schritte mit Spock
Lassen Sie uns zunächst sehen, welche Bibliotheken je nach verwendetem Build-System erforderlich sind (z. B. Gradle / Maven).
Für Maven-basierte Projekte
Maven-Projekte müssen ein Plugin zum Kompilieren von Gradle-Code sowie ein todsicheres Plugin enthalten, um groovige Spezifikationen ausführen zu können. Zusätzlich zu diesem Groovy & Spock, Abhängigkeiten sollte auch hinzugefügt werden.
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-basierte Projekte
Für eine Beispiel-Gradle-Datei wie unten sind die wichtigsten Anforderungen das Gradle-Plugin und die Abhängigkeiten für Groovy für Code und 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' }
Anatomie einer Spock-Spezifikation
Spock-Tests können für jede Sprache geschrieben werden, die auf JVM ausgeführt wird. Dies bedeutet, dass Sie auch dann, wenn sich Ihr Anwendungscode in Java, Scala, Kotlin usw. befindet, Ihre Unit- / Integrationstests in Spock schreiben können (gegenüber anderen wie JUnit, JBehave usw.).
Spock-Testklassen werden als 'Spezifikationen' bezeichnet (ähnlich den Spezifikationen in der BDD-Welt), und Sie können die Klasse 'Spezifikation' des Spock-Frameworks erweitern. (Spezifikation ist die Basisklasse des Spock-Frameworks).
Jede Spezifikationsdatei kann mehrere Tests enthalten (ähnlich einer JUnit-Testklassendatei), und jeder Test kann optional die BDD-Blöcke enthalten, d. H. Gegeben, wann und wann. Dies ähnelt anderen BDD-Frameworks, bei denen jeder dieser Abschnitte in den JUnit-Tests mit den Abschnitten Anordnen, Handeln und Bestätigen korreliert werden kann.
Unten finden Sie ein Blockdiagramm, das die Hierarchie von Spezifikationen und Tests darstellt.
Mal sehen, wie eine Beispielspezifikation im Code aussieht:
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 } }
Einige wichtige Punkte, die hier zu beachten sind:
# 1) Sehen Sie sich den Namen der Testszenarien an (die Zeichenfolge nach dem Schlüsselwort def): 'Überprüfen Sie die Gleichheit von 2 Zeichenfolgen ohne Berücksichtigung der Groß- und Kleinschreibung'. Dies sind einfache englische Zeichenfolgen, und dies macht die Testnamen gut lesbar und gibt einen echten Sinn, um zu testen, was damit erreicht wird.
Vergleichen Sie es mit dem üblichen JUnit-Test, bei dem der Testname ungefähr so aussieht wie c.
caseEquality_withValidInput_shouldBeEqual()
#zwei) Gegeben, wann und dann Blöcke gleichbedeutend mit Anordnen, Handeln und Bestätigen sind. Schauen Sie sich aus diesen den then (oder assert-Block) an, der die Gleichheitsbehauptung impliziert und jeglichen mit Zusicherungen verbundenen Boilerplate-Code vermeidet.
Beispiel Eine Behauptung in JUnit hätte wie folgt ausgesehen:
@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); }
Wie Sie oben sehen können, lassen die Spock-Tests die Tests weniger ausführlich aussehen und vermeiden jeglichen Code für das Boilerplate in Zusicherungen (und Setup usw.).
Beschreibung der Spezifikationsblöcke
Für jeden einzelnen Block in einem Test können Sie die Blockbeschreibung als Zeichenfolge angeben, um weitere Details zu dem Block bereitzustellen, der ausgeführt wird. Dies ist hilfreich, um dem Test eine ausführlichere Struktur zu verleihen.
Sehen wir uns unten ein Beispiel an:
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 }
Wichtige Tipps
# 1) Alle Blöcke in einer Spock-basierten Spezifikation sind optional. Wenn vorhanden, sollten „wann“ und „dann“ nacheinander zusammen erscheinen.
#zwei) Wenn Sie nur eine Behauptung validieren müssen (und keine Wann-Blockierung benötigen), können Sie ' erwarten von ' Block. Es kann verwendet werden, um Vorbedingungen zu aktivieren, noch bevor und dann blockiert wird (und kann in einem Test mehrmals verwendet werden).
Sehen wir uns ein Beispiel für die Verwendung von Expect an, z. B. das Überprüfen der Vorbedingung, bevor der 'Wann' -Block ausgeführt wird.
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 }
Wie oben gezeigt, versucht der Expect-Block, den Klassenwert der Eingabefelder sowie den Wert einer der Eingaben innerhalb des Bereichs zu bestätigen.
Fazit
In diesem Spock-Tutorial haben wir die Grundlagen der Programmiersprache Groovy sowie die Anatomie oder die Grundbausteine einer Spock-Spezifikation behandelt.
Wir haben ein Beispielprojekt mit den erforderlichen Abhängigkeiten erstellt, um groovige Spock-Spezifikationen zu schreiben, und eine Beispielspezifikation geschrieben.
In den anderen Tutorials dieser Reihe werden wir uns eingehender mit den Funktionen des Spock-Frameworks befassen und erfahren, wie sie mithilfe der groovigen Sprache saubere und lesbare Testspezifikationen erstellen.
Was ist Regressionstest in Qa
Bleiben Sie auf dem Laufenden mit unseren kommenden Spock-Tutorials, um mehr über Test-Fixtures, Assertions und Reporting in Spock zu erfahren.
Literatur-Empfehlungen
- Unit-Tests mit Spock Framework schreiben
- Spock Interview Fragen mit Antworten (am beliebtesten)
- Spock für Integration und Funktionstests mit Selen
- Spock Mocking and Stubbing (Beispiele mit Video-Tutorials)
- Datengesteuertes oder parametrisiertes Testen mit Spock Framework
- Ausführliche Eclipse-Tutorials für Anfänger
- Java Reflection Tutorial mit Beispielen
- Cucumber Selenium Tutorial: Integration von Cucumber Java Selenium WebDriver