spock interview questions with answers
Cancella la tua intervista a Spock con successo con questo elenco di domande per l'intervista a Spock:
In questo Tutorial di Spock per tutti , abbiamo esplorato tutto Integrazione e test funzionali in Spock nel nostro precedente tutorial.
Questo tutorial tratterà le domande di intervista più frequenti sul framework Spock.
c # domande e risposte dell'intervista per le matricole
Cercheremo anche di comprendere i metodi di fissaggio di Spock e il supporto delle estensioni incorporate che rendono Spock uno strumento davvero potente per molti tipi di test come Unità, Integrazione e end to end.
Domande di intervista a Spock più popolari
Di seguito sono elencate alcune delle domande di intervista di Spock più frequenti con risposte ed esempi.
Esploriamo !!
D # 1) Un test di Spock può avere più blocchi quando e poi?
Risposta: In genere si consiglia di avere piccoli test o scenari, poiché provare a fare molte cose in un singolo test potrebbe essere un odore di codice. Detto questo, è perfettamente valido avere più quando e poi blocchi in un test. Il test sarà considerato riuscito solo quando tutti i blocchi allora saranno in stato di superamento.
Vediamo un esempio per illustrare questo:
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 }
Nel blocco di codice sopra, puoi vedere che abbiamo 2 quando e poi blocchi.
Si prega di notare i seguenti punti:
- I blocchi vengono eseguiti nell'ordine in cui sono visualizzati, ovvero in sequenza.
- Il fallimento di qualcuno dopo il blocco porterà al fallimento del test.
- Affinché il test complessivo abbia successo, le asserzioni in tutti i blocchi allora dovrebbero passare.
D # 2) Quali sono tutti i metodi di fissaggio disponibili in Spock?
Risposta: I metodi di fissaggio sono come i callback che vengono chiamati quando viene attivato un particolare hook di evento.
Spock ha fornito 4 dispositivi di prova che vengono attivati contro diversi eventi:
- setupSpec - Viene eseguito una volta prima dell'inizio dell'intera esecuzione del file Spec.
- cleanupSpec - Viene eseguito una volta quando vengono eseguiti tutti i test nel file Spec specificato
- impostare - Viene eseguito una volta prima di ogni test nelle specifiche.
- pulire - Viene eseguito una volta dopo ogni test nelle specifiche.
Vediamo un esempio di codice per illustrare i metodi del dispositivo:
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****' }}
Di seguito è riportato l'output dell'esempio di codice precedente:
implementazione c ++ dell'albero binario
nelle specifiche di installazione!
in configurazione!
**** test spec1 ****
in cleanup!
in configurazione!
**** test spec2 ****
in cleanup!
nelle specifiche di pulizia!
Come mostrato sopra, puoi notare che le specifiche di configurazione e pulizia vengono chiamate una sola volta per l'intera specifica e le fasi / dispositivi di configurazione e pulizia vengono chiamate una volta per test.
D # 3) I test di Spock possono essere usati per testare servizi basati su REST?
Risposta: Sì, il framework Spock può essere utilizzato per creare E2E o test di integrazione per servizi di riposo distribuiti utilizzando librerie Java comuni come il modello Rest, ecc. (Inoltre, si noti che Spock può essere utilizzato anche per eseguire test per applicazioni basate su Spring con altri framework come Selenio ).
Vediamo questo con un semplice esempio che utilizza la classe RestTemplate di Spring ed esegue un'operazione di recupero su un'API ospitata pubblica e verifica che la risposta non sia nulla.
Esempio:
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 } }
Nell'esempio sopra, puoi fare riferimento alla specifica Spock che viene utilizzata per affermare la risposta di un'API pubblica.
D # 4) Quali sono i limiti del framework Spock?
Risposta: Sebbene la curva di apprendimento per il framework Spock non sia così ripida quanto facile da apprendere, la sua sintassi dichiarativa lo rende altamente leggibile.
Nel frattempo, ci sono alcuni punti che potrebbero essere considerati:
- Per le applicazioni su base di codice Java, l'utilizzo di Spock comporterà l'aggiunta di un nuovo stack di lingue, ad esempio Groovy.
- I test di Spock vengono eseguiti leggermente più lentamente dei test JUnit nativi.
- Il supporto IDE per Spock non è buono come per altri framework come JUnit.
Nonostante tutti i punti di cui sopra, tuttavia, i vantaggi del framework Spock superano il piccolo elenco di svantaggi di Spock.
D # 5) Spiegare alcune delle estensioni integrate del framework Spock.
Risposta: Spock fornisce molte estensioni / hook / trigger incorporati che sono principalmente basati su annotazioni (ne abbiamo visti un paio nella sezione / domanda sui dispositivi di prova).
Vediamo alcune delle discussioni integrate con gli esempi:
@Ignorare: Per impedire l'esecuzione di una funzione (o di un singolo metodo). Per poter utilizzare semplicemente il metodo decorate (metodo di test individuale) o un'intera specifica, questo assicurerà che il metodo o la classe annotati non vengano eseguiti.
@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: Questa annotazione è utile quando si desidera selezionarne una ed eseguire il resto dei metodi della specifica data.
miglior software gratuito di riparazione di Windows 10
@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 }
Come visto nell'esempio precedente, il metodo annotato con @IgnoreRest verrà eseguito e il resto dei test verrà ignorato.
@IgnoreIf: Questa annotazione è un'ignoranza condizionale.
Per esempio: Se non vuoi eseguire alcuni test su Mac OS, puoi utilizzare una combinazione di @IgnoreIf con System.getProperty ('os.name') che assicurerà che i test verranno eseguiti solo se viene trovato il sistema operativo corrispondente .
Proviamo a capirlo con il seguente codice di esempio:
@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 }
Nell'esempio di codice sopra, abbiamo utilizzato l'annotazione @IgnoreIf con una condizione su System.getProperty che verificherà la presenza di 'Mac' nel valore della proprietà e ignorerà solo se la corrispondenza della condizione ha esito positivo.
Vediamo un'altra estensione qui, ad es. @Tempo scaduto: Questo aiuta a menzionare un valore di timeout nell'unità di tua scelta per il test in esecuzione e se la soglia di timeout viene superata, il test genererà un'eccezione.
Un altro punto importante da notare qui è che l'annotazione @Timeout può essere menzionata anche sulle specifiche complete e questo combinerà la durata di tutti i singoli test e genererà un'eccezione in caso di violazione della soglia.
@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 } }
Nel codice precedente, se il tempo di esecuzione totale della specifica supera i 10 ms, l'esecuzione dello scenario fallirà. È possibile visualizzare l'output con i dettagli dell'errore nella console degli errori.
Simile alle estensioni sopra menzionate, ci sono anche un paio di altre estensioni integrate come:
@Richiede: Che richiede una condizione specifica per essere vera.
@Problema: Per collegare eventuali difetti associati allo scenario di test, ecc.
Queste estensioni aggiungono molta flessibilità e potenza alle specifiche Spock e danno molto controllo per l'esecuzione del test.
Conclusione
Pertanto, in questo tutorial abbiamo trattato le domande di intervista di Spock più popolari. La curva di apprendimento per Spock è bassa a causa del fatto che il linguaggio groovy segue uno stile di programmazione dichiarativo ed è altamente leggibile.
Sebbene relativamente nuovo, Spock sta guadagnando popolarità come framework di scelta per scrivere diversi tipi di test in Giava o applicazioni basate su Groovy.
Spero che ti siano piaciuti tutti i tutorial informativi di questa serie di Spock. Siamo davvero sicuri che questi tutorial avrebbero arricchito la tua conoscenza e comprensione di Spock.
Tutorial PREV | PRIMO Tutorial
Lettura consigliata
- Scrittura di unit test con Spock Framework
- Spock per integrazione e test funzionali con selenio
- Spock beffardo e stubbing (esempi con tutorial video)
- Test basato sui dati o parametrizzato con Spock Framework
- Tutorial di Spock: test con Spock e Groovy
- Domande e risposte dell'intervista
- ETL Testing Interview Domande e risposte
- 20 domande e risposte dell'intervista TestNG più popolari