spock interview questions with answers
Limpe sua entrevista de Spock com sucesso com esta lista de perguntas da entrevista de Spock:
Nisso Tutoriais Spock para todos , nós exploramos tudo sobre Integração e teste funcional em Spock em nosso tutorial anterior.
Este tutorial cobrirá as perguntas mais comuns da entrevista sobre a estrutura de Spock.
Também tentaremos entender os métodos de fixação do Spock e o suporte a extensões integradas que tornam o Spock uma ferramenta realmente poderosa para muitos tipos de teste como Unidade, Integração e ponta a ponta.
Perguntas mais populares da entrevista de Spock
Listados abaixo estão algumas das perguntas da entrevista de Spock mais comuns, com respostas e exemplos.
Vamos explorar!!
P # 1) Um teste de Spock pode ter vários blocos quando e depois?
Responda: Em geral, é recomendável ter pequenos testes ou cenários, pois tentar fazer muitas coisas em um único teste pode ser um cheiro de código. Dito isso, é perfeitamente válido ter vários blocos quando e depois em um teste. O teste será considerado bem-sucedido apenas quando todos os blocos then estiverem no estado aprovado.
melhor extensão de bloqueador de pop-up do Chrome
Vejamos um exemplo para ilustrar isso:
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 }
No bloco de código acima, você pode ver que temos 2 blocos when e then.
Observe os pontos abaixo:
- Os blocos são executados na ordem em que aparecem, ou seja, sequencialmente.
- A falha de qualquer um dos blocos fará com que o teste seja reprovado.
- As afirmações em todos os blocos then devem passar para que o teste geral seja bem-sucedido.
P # 2) Quais são os métodos de fixação disponíveis no Spock?
Responda: Os métodos de fixação são como callbacks que são chamados quando um gancho de evento particular é disparado.
Spock forneceu 4 acessórios de teste que são acionados contra eventos diferentes:
- setupSpec - É executado uma vez antes de iniciar a execução do arquivo Spec inteiro.
- cleanupSpec - É executado uma vez quando todos os testes no arquivo de especificação fornecido são executados
- configurar - É executado uma vez antes de cada teste na especificação.
- limpar - É executado uma vez após cada teste na especificação.
Vamos ver um exemplo de código para ilustrar os métodos de fixação:
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****' }}
Abaixo está a saída do exemplo de código acima:
nas especificações de configuração!
na configuração!
**** teste spec1 ****
na limpeza!
na configuração!
**** teste spec2 ****
na limpeza!
na especificação de limpeza!
Conforme mostrado acima, você pode notar que as especificações de configuração e limpeza são chamadas apenas uma vez para a especificação inteira e as etapas / acessórios de configuração e limpeza são chamados uma vez por teste.
P # 3) Os testes de Spock podem ser usados para testar serviços baseados em REST?
Responda: Sim, a estrutura do Spock pode ser usada para criar E2E ou testes de integração para serviços de descanso implantados usando bibliotecas Java comuns como o modelo Rest, etc. (Além disso, observe que Spock também pode ser usado para executar testes para aplicativos baseados em Spring boot, bem como com outros frameworks como Selênio )
Vamos ver isso com um exemplo simples que usa a classe RestTemplate do Spring e executa uma operação get em uma API hospedada pública e verifica se a resposta não é nula.
Exemplo:
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 } }
No exemplo acima, você pode consultar a especificação Spock que está sendo usada para declarar a resposta de uma API pública.
webdriver selênio com pepino exemplo em eclipse
P # 4) Quais são as limitações da estrutura do Spock?
Responda: Embora a curva de aprendizado para o framework Spock não seja tão íngreme quanto é fácil de aprender, sua sintaxe declarativa o torna altamente legível.
Enquanto isso, existem alguns pontos que podem ser considerados:
- Para aplicativos na base de código Java, o uso de Spock resultará na adição de uma nova pilha de linguagem, ou seja, Groovy.
- Os testes Spock são executados um pouco mais lentamente do que os testes JUnit nativos.
- O suporte IDE para Spock não é tão bom quanto para outras estruturas como JUnit.
Apesar de todos os pontos acima, ainda assim, as vantagens da estrutura de Spock superam a pequena lista de contras que Spock possui.
P # 5) Explique algumas das extensões integradas da estrutura do Spock.
Responda: Spock fornece muitas extensões / ganchos / gatilhos integrados que são principalmente baseados em anotações (vimos alguns deles na seção / pergunta de acessórios de teste).
Vamos ver algumas das discussões internas com exemplos:
@Ignorar: Para evitar que um recurso (ou método individual) seja executado. Para usar simplesmente o método decorate (método de teste individual) ou uma especificação inteira, isso garantirá que o método ou classe anotada não seja executado.
@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: Esta anotação é útil quando você deseja apenas selecionar um e executar o resto dos métodos da Especificação fornecida.
@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 }
Como visto no exemplo acima, o método anotado com @IgnoreRest será executado e o restante dos testes será ignorado.
@IgnoreIf: Esta anotação é um ignorar condicional.
Por exemplo: Se você não quiser executar alguns testes no Mac OS, pode usar uma combinação de @IgnoreIf com System.getProperty (“os.name”) que garantirá que os testes serão executados apenas se o sistema operacional correspondente for encontrado .
Vamos tentar entender isso com o exemplo de código abaixo:
@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 }
No exemplo de código acima, usamos a anotação @IgnoreIf com uma condição em System.getProperty que verifica se há “Mac” no valor da propriedade e ignora apenas se a correspondência de condição for bem-sucedida.
Vamos ver mais uma extensão aqui, ou seja, @Tempo esgotado: Isso ajuda a mencionar um valor de tempo limite na unidade de sua escolha para o teste em execução e, se o limite de tempo limite for violado, o teste lançará uma exceção.
Outro ponto importante a ser observado aqui é que a anotação @Timeout também pode ser mencionada sobre a especificação completa e isso combinará a duração de todos os testes individuais e lançará uma exceção em caso de violação do limite.
@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 } }
No código acima, se o tempo total de execução da especificação exceder 10 ms, a execução do cenário falhará. Você pode ver a saída com detalhes do erro no console de erro.
Semelhante às extensões mencionadas acima, existem algumas outras extensões integradas, bem como:
@Requires: O que requer uma condição específica para ser verdadeiro.
@Emitir: Para vincular quaisquer defeitos associados ao caso de teste, etc.
melhores estúdios de jogos para trabalhar
Essas extensões adicionam muita flexibilidade e poder às especificações de Spock e fornecem muito controle para a execução do teste.
Conclusão
Portanto, cobrimos as perguntas da entrevista de Spock mais populares aqui neste tutorial. A curva de aprendizado para Spock é baixa devido ao fato de que a linguagem groovy segue um estilo de programação declarativo e é altamente legível.
Embora relativamente novo, Spock está ganhando popularidade como uma estrutura de escolha para escrever diferentes tipos de testes em Java ou aplicativos baseados em Groovy.
Espero que você tenha gostado de todos os tutoriais informativos desta série Spock. Temos certeza de que esses tutoriais teriam enriquecido seu conhecimento e compreensão de Spock.
PREV Tutorial | PRIMEIRO Tutorial
Leitura recomendada
- Escrevendo testes de unidade com o Spock Framework
- Spock para integração e testes funcionais com selênio
- Spock Mocking e Stubbing (exemplos com tutoriais em vídeo)
- Teste baseado em dados ou parametrizado com Spock Framework
- Tutorial do Spock: Testando com Spock e Groovy
- Perguntas e respostas da entrevista
- Perguntas e respostas da entrevista de teste de ETL
- 20 perguntas e respostas mais populares da entrevista TestNG