spock interview questions with answers
Esborreu la vostra entrevista Spock amb èxit amb aquesta llista de preguntes sobre l'entrevista Spock:
En aquest Spock Tutorials per a tothom , ho vam explorar tot Integració i proves funcionals a Spock al nostre tutorial anterior.
Aquest tutorial tractarà les preguntes més freqüents de l'entrevista al voltant del marc Spock.
També intentarem entendre els mètodes de fixació de Spock i el suport d’extensions integrades que fan que Spock sigui una eina molt potent per a molts tipus de proves com Unitat, Integració i extrem a extrem.
Preguntes d'entrevistes més populars a Spock
A continuació, es detallen algunes de les preguntes més freqüents amb entrevistes a Spock, amb respostes i exemples.
Explorem !!
P # 1) Una prova Spock pot tenir múltiples blocs quan i després?
Resposta: En general, es recomana fer proves o escenaris petits, ja que intentar fer moltes coses en una sola prova pot ser una olor a codi. Dit això, és perfectament vàlid tenir múltiples quan i després bloquejar una prova. La prova només es considerarà exitosa quan tots els blocs de llavors estiguin en estat de passada.
Vegem un exemple per il·lustrar-ho:
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 }
Al bloc de codi anterior, podeu veure que tenim 2 blocs quan i després.
Tingueu en compte els punts següents:
- Els blocs s’executen en l’ordre de la seva aparició, és a dir, seqüencialment.
- El fracàs de qualsevol bloqueig provocarà un error en la prova.
- Les afirmacions de tots els blocs de llavors haurien de passar perquè la prova general tingui èxit.
P # 2) Quins mètodes de fixació hi ha disponibles a Spock?
Resposta: Els mètodes de solucions són com les devolucions de trucada que es diuen quan s'activa un ganxo d'esdeveniment concret.
Spock va proporcionar 4 accessoris de prova que es desencadenen contra diferents esdeveniments:
- setupSpec - S’executa una vegada abans que comenci l’execució completa del fitxer Spec.
- cleanupSpec - S’executa una vegada quan s’executen totes les proves del fitxer Spec
- configuració - S’executa una vegada abans de cada prova de l’especificació.
- netejar - S’executa una vegada després de cada prova de l’especificació.
Vegem un exemple de codi per il·lustrar els mètodes de fixació:
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****' }}
A continuació es mostra la sortida de l’exemple de codi anterior:
a les especificacions de configuració
en configuració
**** especificacions de prova1 ****
en neteja!
en configuració
**** spec2 de prova ****
en neteja!
a les especificacions de neteja!
Com es mostra més amunt, podeu notar que les especificacions de configuració i neteja es denominen una sola vegada per a tota l’especificació i que els passos / accessoris de configuració i neteja es diuen una vegada per prova.
P # 3) Es poden utilitzar les proves Spock per provar serveis basats en REST?
Resposta: Sí, el framework Spock es pot utilitzar per crear proves E2E o d’integració per a serveis de descans desplegats mitjançant biblioteques Java comuns, com ara plantilla Rest, etc. amb altres marcs com Seleni ).
Vegem-ho amb un exemple senzill que utilitza la classe RestTemplate de Spring i realitza una operació get en una API allotjada en públic i comprova que la resposta no és nul·la.
Exemple:
què és la prova de regressió al programari
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 } }
A l'exemple anterior, podeu consultar l'especificació de Spock que s'utilitza per afirmar la resposta d'una API pública.
Q # 4) Quines són les limitacions del framework Spock?
Resposta: Tot i que la corba d’aprenentatge del framework Spock no és tan pronunciada com fàcil d’aprendre, la seva sintaxi declarativa el fa molt llegible.
Mentrestant, hi ha alguns punts que podríem considerar:
implementant una llista enllaçada a Java
- Per a les aplicacions en base de codis Java, utilitzar Spock donarà lloc a una nova pila de llenguatge, és a dir, Groovy.
- Les proves Spock són una mica més lentes que les proves natives de JUnit.
- El suport IDE per a Spock no és tan bo com per a altres frameworks com JUnit.
Malgrat tots els punts anteriors, els avantatges del marc Spock superen la petita llista de desavantatges que té Spock.
Q # 5) Expliqueu algunes de les extensions integrades del framework Spock.
Resposta: Spock proporciona moltes extensions / ganxos / activadors integrats que es basen principalment en anotacions (en vam veure un parell a la secció / pregunta sobre accessoris de prova).
Vegem alguns dels debats integrats amb exemples:
@ Ignorar: Per evitar que s'executi una característica (o un mètode individual). Per fer servir simplement el mètode de decoració (mètode de prova individual) o tota una especificació, això garantirà que el mètode o la classe anotats no s'executin.
@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: Aquesta anotació és útil quan només voleu seleccionar-ne una i executar la resta de mètodes de l'especificació donada.
@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 }
Com es veu a l'exemple anterior, s'executarà el mètode anotat amb @IgnoreRest i s'ignoraran la resta de proves.
@IgnoreIf: Aquesta anotació és una ignoració condicional.
Per exemple: Si no voleu executar algunes proves en Mac OS, podeu utilitzar una combinació de @IgnoreIf amb System.getProperty ('nom.os') que us assegurarà que les proves només s'executaran si es troba el sistema operatiu que coincideix .
Intentem entendre-ho amb el següent exemple de codi:
@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 }
A l’exemple de codi anterior, hem utilitzat l’anotació @IgnoreIf amb una condició a System.getProperty que comprovarà si hi ha 'Mac' al valor de la propietat i només s’ignorarà si la concordança de condició és correcta.
Vegem una extensió més aquí, és a dir, @Timeout: Això ajuda a esmentar un valor de temps d'espera a la unitat que trieu per a la prova en execució i, si es supera el llindar de temps d'espera, la prova generarà una excepció.
Un altre punt important que cal tenir en compte aquí és que l’anotació @Timeout també es pot esmentar a l’especificació completa i combinarà la durada de totes les proves individuals i generarà una excepció en cas d’incompliment del llindar.
@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 } }
Al codi anterior, si el temps d'execució total de l'especificació supera els 10 ms, l'execució de l'escenari fallarà. Podeu veure la sortida amb detalls d'error a la consola d'errors.
De manera similar a les extensions esmentades anteriorment, hi ha un parell d’altres extensions integrades, com ara:
@ Requisits: La qual cosa requereix una condició específica per ser certa.
@Assumpte: Per enllaçar qualsevol defecte associat al cas de prova, etc.
Aquestes extensions afegeixen molta flexibilitat i potència a les especificacions de Spock i donen molt control per a l'execució de la prova.
Conclusió
Per tant, hem tractat les preguntes d’entrevistes Spock més populars aquí en aquest tutorial. La corba d’aprenentatge de Spock és baixa a causa del fet que el llenguatge groovy segueix un estil de programació declaratiu i és molt llegible.
Tot i que és relativament nou, Spock guanya popularitat com a marc d’elecció per escriure diferents tipus de proves Java o aplicacions basades en Groovy.
Espero que hagueu gaudit de tots els tutorials informatius d’aquesta sèrie Spock. Estem segurs que aquests tutorials haurien enriquit el vostre coneixement i comprensió de Spock.
PREV Tutorial | PRIMER Tutorial
Lectura recomanada
- Proves d’unitat d’escriptura amb Spock Framework
- Spock per a la integració i proves funcionals amb seleni
- Spock burleta i obstrucció (exemples amb tutorials de vídeo)
- Proves basades en dades o parametritzades amb Spock Framework
- Spock Tutorial: proves amb Spock i Groovy
- Preguntes i respostes de l’entrevista
- Preguntes i respostes de l'entrevista de proves ETL
- 20 preguntes i respostes de l'entrevista TestNG més populars