Questjáescreve testes hal algum tempo deve ter percebido que,para cada funcionalidade daaplicaçãoque queremos testar,temos que escrever ao menos umcenárioque cobre o“ caminho feliz” e um maiscenários。 Escrevemos muito maismaócódigonasuítede testes emcomparaçãoaocódigoqueseráexecutado de fato emprodução。
Tendo isso em vista,一种在铁皮制造厂中发挥作用的铁丝网,在机械加工中是很重要的。
卡米尼奥·费利斯(Caminho Feliz):根据项目的具体情况,使用客户的应用程序。 Caminho infeliz:请尽可能多地向客户提供证明(使用权)。
Neste artigo vou apresentar o Spock, um framework de testes para aplicações Java e Groovy, e como sua linguagem de especificação elegante e expressiva pode trazer maior produtividade no dia-a-dia do programador.
Analisaremos o Spock através das seguintes características:
- 遗嘱的合法性参选资格考试Reportando falhasTestando ainteraçãoentre objetos:“嘲笑” e”存根”Trabalhando com优惠
Legibilidade e organização do teste
Praticamente todo teste que escrevemos (salvo algumas exceções) seguem as seguintes fases:
- 配置:ondeinicializamososdadosqueutilizaremosnoteste.执行力:ondeoobjetoqueestásendotestadoseráexecutado.Verificação:ondeavaliamososresultadosretornadosnafasedeexecução.
Vamos exemplificar essas fases escrevendo um cenário que testará uma funcionalidade fictícia de cadastro de usuário com JUnit 5:
《 Embora essas fases estejam》介绍了《毛利人的故事》,《 nem todas》,作为《 explanicita》中的《discanẽdismeẽmecanismosparadeixar》。 JUnit的成本没有增加,也没有理由。
Reescrevendo esse mesmo cenário com o Spock o teste fica bem mais legível e organizado, graças a linguagem Groovy (base do Spock) que nos permite escrever os métodos de forma declarativa e manter o corpo do teste mais simples e conciso. O Spock impõe a separação das fases ao estilo BDD, utilizando os blocos: “given”, “when” e “then”.
A fase de verificação também fica mais simples, pois utiliza os mesmos operadores de comparação do Java (removendo a necessidade de conhecer os métodos de “assertion”):
Dica: existe também o bloco “and” que pode ser usado para deixar a especificação do teste mais compreensível:
Versatilidade de parametrização do teste
证明书执行人或证明书执行人的身份,并在法院生效。
O Spock解决了有问题的旅行,“哪里onde podemos证明人uma lista de dados睾丸的效用率高。
No exemplo abaixo utilizamos o “Data Tables” para fornecer os dados de entrada ao método do teste. A primeira linha da tabela (header) declara o nome das variáveis que utilizaremos no teste, e as demais linhas correspondem ao valor dessas variáveis. Para cada linha o método do teste será executado uma vez.
组织形式或形式的组织;组织形式的组织;组织机构;组织机构;组织机构 fazendo com que o teste sirva como umadocumentaçãodo funcionamento do objeto sob teste。
O Spock utiliza o conceito de “Data Driven Testing”, que fornece diversas formas de gerarmos dados de entrada, dando mais flexibilidade ao programador durante a escrita dos testes:
- Data Tables
- Data Pipes
- Multi-Variable Data Pipes
- Data Variable Assignment
- Combinação dos itens acima
Reportando falhas
没有关于“哪里”的事前证明书(linha 9):
Dica: prefira utilizar o bloco “expect” quando a execução e a validação podem ser descritas numa única fase.
执行人或执行人不得再提出任何要求:
Com Spock é fácil de identificar que a falha ocorreu na segunda interação, mas podemos deixar essa informação ainda mais explícita utilizando a anotação de “@Unroll”:
不能在任何情况下使用惯用的惯用语“#”在任何情况下都不能使用睾丸。 执行新手条款:
身份相同的大事记,负责人是大法官。
Testando a interação entre objetos
Mocking
Nemsódeverificaçãode estado vivem nossos睾丸; 从对象到对象的探究,从对象到对象的所有方面都必须遵守。
Nesse tipo de teste (também conhecido como “Interaction Tests” ou “Collaboration Test”) utilizamos a técnica de “Mock” (imitar) para conseguirmos analisar as interações entre os objetos sob teste.
A criação de “Mocks” é muito simples e pode ser feita de duas formas:
O utilizando sintaxe Java:
Vejamos o uso do“嘲笑” mais detalhadamente no exemplo abaixo(linhas 14,15):
Diferente dos exemplos anteriors,no quais verificamos o estado do objeto sob teste(ex:user.getName()==名称); nosso interesse agoeraésaber seapósfaseexecução(“什么时候”)o objeto“发行人”“作为必要性的现实”,“ colaboradores”订户”。
塞维利亚的无国界医生组织,没有任何经验证明”订户”,seja chamadoatravésdométodo“接收”,“接受推荐”你好”伊索·伊索·奥索拉·阿佩纳斯·韦兹。
EssasrestriçõesestãoOrganizadas no Spock da seguinte形式:
- 红衣主教雷斯特里昂德阿尔沃里斯托雷昂德梅多多反对辩论
Obs: todas as variações de restrição podem ser vistas na documentação do Spock.
Stubbing
Como podemos testar um objeto,独立形式,全权委托人结果是否在合作伙伴中存在?
预先定义了可协作的控制对象和最终定义的可替代对象,作为可重复使用的可替代对象。
Chamamos essa técnica de “Stub”, onde substituímos o objeto real por um objeto que será alimentado com as entradas que desejamos utilizar no nosso testes.
Alteramos o nosso exemplo de teste que agora utiliza o “Stubbing” para definir um resultado ao método “receive” da interface “Subscriber” (linha 22). Dessa forma podemos validar não apenas a interação mas também o retorno esperado:
作为Interaçõescom“存根”以国际交流的形式传播”嘲弄”,符合demonstrado abaixo的要求:
Mais uma vez, todas as variações de interações pode ser vistas na documentação do Spock, especialmente a parte que trata da combinação de “中号ocking” e “Stubbing”.
Trabalhando com exceções
由fim,porémnãomenos essentiale,precisamos ser capazes devalidar quando o objeto sob teste develançarumaexceção组成。
Geralmente,我们的遗嘱证明书,形式:
1 - Validar a ocorrência de uma exceção (“Exception Conditions”).
2 - Simular uma exceção como efeito colateral (utilizando “Stubs”).
Conclusão
Ainda como pontos positivos do Spock vale listar:
- Spock disponibiliza um “Web Console” onde podemos experimentar o seu funcionamento.
- Projeto de exemplo mostrando como configurar com: Ant, Gradle e Maven.
- Ótima documentação, embasada em conceitos do Agile e BDD.
- O framework de “Mock” do Spock é integrado, ou seja, não é preciso importar outras bibliotecas (embora também seja possível utilizá-las em conjunto com o Spock).
- Integração com o Spring.
Nem tudo são flores. Importante ressaltar que, em comparação, o JUnit 5 ganha nos seguintes pontos:
- Java 100%实施。Melhor compatibilidade com是últimasversdaes da JDK。Melhorintegraçãocom作为IDE。
Enfim,利用Spock pela primeira veznãolarguei mais; 产地不动产,产地证,产地证和通行证。
推荐人: