spock interview questions with answers
Löschen Sie Ihr Spock-Interview erfolgreich mit dieser Liste von Spock-Interview-Fragen:
In diesem Spock Tutorials für alle haben wir alles erkundet Integration und Funktionsprüfung in Spock in unserem vorherigen Tutorial.
Dieses Tutorial behandelt die am häufigsten gestellten Interviewfragen rund um das Spock-Framework.
Wir werden auch versuchen, die Spock-Fixture-Methoden und die Unterstützung für integrierte Erweiterungen zu verstehen, die Spock zu einem wirklich leistungsstarken Tool für viele Testtypen wie Unit, Integration und End-to-End machen.
Die beliebtesten Fragen zum Spock-Interview
Nachfolgend finden Sie einige der am häufigsten gestellten Fragen zum Spock-Interview mit Antworten und Beispielen.
Lass uns erforschen!!
F # 1) Kann ein Spock-Test mehrere Wann- und dann Blockierungen haben?
Antworten: Es wird allgemein empfohlen, kleine Tests oder Szenarien durchzuführen, da der Versuch, viele Dinge in einem einzigen Test auszuführen, ein Codegeruch sein kann. Trotzdem ist es vollkommen gültig, mehrere Wann- und dann Blockierungen in einem Test zu haben. Der Test wird nur dann als erfolgreich angesehen, wenn sich alle Then-Blöcke im Bestehenszustand befinden.
Sehen wir uns ein Beispiel an, um dies zu veranschaulichen:
def 'illustrate multiple when and then blocks'() { given: def input1 = 50 def input2 = 100 def result when: result = input1 + input2 then: result == 150 when: result = input2 - input1 then: result == 50 }
Im obigen Codeblock können Sie sehen, dass wir 2 Wann- und dann Blöcke haben.
Bitte beachten Sie die folgenden Punkte:
- Die Blöcke werden in der Reihenfolge ihres Auftretens ausgeführt, d. H. Nacheinander.
- Wenn jemand blockiert, wird der Test fehlgeschlagen.
- Behauptungen in allen then-Blöcken sollten bestanden werden, damit der Gesamttest erfolgreich ist.
F # 2) Welche Befestigungsmethoden sind in Spock verfügbar?
Antworten: Fixture-Methoden sind wie Rückrufe, die aufgerufen werden, wenn ein bestimmter Event-Hook ausgelöst wird.
Spock stellte 4 Testgeräte zur Verfügung, die gegen verschiedene Ereignisse ausgelöst werden:
- setupSpec - Wird einmal ausgeführt, bevor die gesamte Ausführung der Spec-Datei beginnt.
- cleanupSpec - Wird einmal ausgeführt, wenn alle Tests in der angegebenen Spezifikationsdatei ausgeführt wurden
- installieren - Läuft einmal vor jedem Test in der Spezifikation.
- Aufräumen - Läuft einmal nach jedem Test in der Spezifikation.
Sehen wir uns ein Codebeispiel an, um die Fixture-Methoden zu veranschaulichen:
class TestFixtureSpec extends Specification { def setupSpec() { println 'in setup spec!' } def cleanupSpec() { println 'in cleanup spec!' } def setup() { println 'in setup!' } def cleanup() { println 'in cleanup!' } def 'test spec1'() { given: println '****test spec1****' } def 'test spec2'() { given: println '****test spec2****' }}
Unten ist die Ausgabe des obigen Codebeispiels:
in Setup-Spezifikation!
im Setup!
**** Testspezifikation1 ****
in Aufräumarbeiten!
im Setup!
**** Testspezifikation2 ****
in Aufräumarbeiten!
in Aufräumspezifikation!
Wie oben gezeigt, können Sie feststellen, dass die Setup- und Bereinigungsspezifikation für die gesamte Spezifikation nur einmal aufgerufen wird und die Setup- und Bereinigungsschritte / -vorrichtungen einmal pro Test aufgerufen werden.
Was ist eine .eps-Datei?
F # 3) Können Spock-Tests zum Testen von REST-basierten Diensten verwendet werden?
Antworten: Ja, das Spock-Framework kann zum Erstellen von E2E- oder Integrationstests für bereitgestellte Rest-Services unter Verwendung gängiger Java-Bibliotheken wie Rest-Vorlagen usw. verwendet werden. (Beachten Sie außerdem, dass Spock auch zum Ausführen von Tests für Spring-Boot-basierte Anwendungen verwendet werden kann mit anderen Frameworks wie Selen ).
Sehen wir uns dies anhand eines einfachen Beispiels an, das die RestTemplate-Klasse von Spring verwendet, eine get-Operation für eine öffentlich gehostete API ausführt und überprüft, ob die Antwort nicht null ist.
Beispiel:
class RestApiIntegrationSpec extends Specification { def 'check rest api status'() { when: 'a rest call is performed to the status page' RestTemplate restTemplate = new RestTemplate() String response = restTemplate.getForObject('https://httpbin.org/get', String.class) then: response != null } }
Im obigen Beispiel können Sie auf die Spock-Spezifikation verweisen, mit der die Antwort einer öffentlichen API bestätigt wird.
F # 4) Was sind die Einschränkungen des Spock-Frameworks?
Antworten: Obwohl die Lernkurve für das Spock-Framework nicht so steil wie leicht zu erlernen ist, ist es aufgrund seiner deklarativen Syntax gut lesbar.
In der Zwischenzeit gibt es einige Punkte, die berücksichtigt werden könnten:
- Bei Anwendungen auf Java-Codebasis führt die Verwendung von Spock zum Hinzufügen eines neuen Sprachstapels, d. H. Groovy.
- Spock-Tests laufen etwas langsamer als native JUnit-Tests.
- Die IDE-Unterstützung für Spock ist nicht so gut wie für andere Frameworks wie JUnit.
Trotz aller oben genannten Punkte überwiegen die Vorteile des Spock-Frameworks die kleine Liste der Nachteile, die Spock hat.
F # 5) Erläutern Sie einige der integrierten Erweiterungen des Spock-Frameworks.
Antworten: Spock bietet viele integrierte Erweiterungen / Hooks / Trigger, die größtenteils auf Anmerkungen basieren (wir haben einige davon im Abschnitt / in der Frage zu den Testvorrichtungen gesehen).
Sehen wir uns einige der eingebauten Diskussionen mit Beispielen an:
@Ignorieren: Um zu verhindern, dass ein Feature (oder eine einzelne Methode) ausgeführt wird. Um einfach die Dekorationsmethode (einzelne Testmethode) oder eine gesamte Spezifikation zu verwenden, wird sichergestellt, dass die mit Anmerkungen versehene Methode oder Klasse nicht ausgeführt wird.
@Ignore def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
@IgnoreRest: Diese Anmerkung ist nützlich, wenn Sie nur eine auswählen und die restlichen Methoden der angegebenen Spezifikation ausführen möchten.
@IgnoreRest def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 } 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 im obigen Beispiel zu sehen ist, wird die mit @IgnoreRest kommentierte Methode ausgeführt und der Rest der Tests wird ignoriert.
@IgnoreIf: Diese Anmerkung ist eine bedingte Ignorierung.
Zum Beispiel: Wenn Sie einige Tests unter Mac OS nicht ausführen möchten, können Sie eine Kombination von @IgnoreIf mit System.getProperty ('os.name') verwenden, um sicherzustellen, dass die Tests nur ausgeführt werden, wenn das passende Betriebssystem gefunden wird .
Versuchen wir dies anhand des folgenden Codebeispiels zu verstehen:
@IgnoreIf({ System.getProperty('os.name').contains('Mac') }) def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello world' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
Im obigen Codebeispiel haben wir die Annotation @IgnoreIf mit einer Bedingung in System.getProperty verwendet, die den Eigenschaftswert auf 'Mac' überprüft und nur ignoriert, wenn die Bedingungsübereinstimmung erfolgreich ist.
Sehen wir uns hier eine weitere Erweiterung an, d. H. @Auszeit: Dies hilft dabei, einen Timeout-Wert in der Einheit Ihrer Wahl für den ausgeführten Test anzugeben. Wenn der Timeout-Schwellenwert überschritten wird, löst der Test eine Ausnahme aus.
Ein weiterer wichtiger Punkt, der hier zu beachten ist, ist, dass die @ Timeout-Annotation auch über die gesamte Spezifikation hinweg erwähnt werden kann. Dadurch wird die Dauer aller einzelnen Tests kombiniert und im Falle einer Schwellenwertverletzung eine Ausnahme ausgelöst.
@Timeout(value=10, unit= TimeUnit.MILLISECONDS) class SampleSpec extends Specification { def 'check case-insensitive equality of 2 strings'() { //test1 } def 'check addition of 2 numbers'() { //test2 } }
Wenn im obigen Code die Gesamtausführungszeit der Spezifikation 10 ms überschreitet, schlägt die Szenarioausführung fehl. Sie können die Ausgabe mit Fehlerdetails in der Fehlerkonsole sehen.
Ähnlich wie bei den oben genannten Erweiterungen gibt es auch einige andere integrierte Erweiterungen wie:
@ Erfordert: Was erfordert, dass eine bestimmte Bedingung erfüllt ist.
@Problem: Verknüpfung von Fehlern im Zusammenhang mit dem Testfall usw.
Diese Erweiterungen verleihen den Spock-Spezifikationen viel Flexibilität und Leistung und bieten viel Kontrolle für die Testausführung.
Fazit
Daher haben wir hier in diesem Tutorial die beliebtesten Fragen zum Spock-Interview behandelt. Die Lernkurve für Spock ist gering, da die Sprache groovig einem deklarativen Programmierstil folgt und gut lesbar ist.
Obwohl relativ neu, gewinnt Spock als bevorzugter Rahmen für das Schreiben verschiedener Arten von Tests an Beliebtheit Java oder Groovy-basierte Anwendungen.
Ich hoffe, Ihnen haben alle informativen Tutorials in dieser Spock-Serie gefallen. Wir sind sicher, dass diese Tutorials Ihr Wissen und Ihr Verständnis von Spock bereichert hätten.
Fragen und Antworten zu SQL Server-Interviews seit 5 Jahren
PREV Tutorial | ERSTES Tutorial
Literatur-Empfehlungen
- Unit-Tests mit Spock Framework schreiben
- Spock für Integration und Funktionstests mit Selen
- Spock Mocking and Stubbing (Beispiele mit Video-Tutorials)
- Datengesteuertes oder parametrisiertes Testen mit Spock Framework
- Spock Tutorial: Testen mit Spock und Groovy
- Interview Fragen und Antworten
- Fragen und Antworten zum ETL-Testinterview
- 20 beliebtesten Fragen und Antworten zu TestNG-Interviews