Simulação de teste de unidade do iOS usando swifty mocky
O Swift foi projetado para ser seguro — suportando reflexão somente leitura. Portanto, não há como modificar seu programa em tempo de execução. No geral, é bom, o código é executado conforme o esperado e outros componentes não podem alterá-lo. Mas, voltando ao nosso tópico, todas as estruturas simuladas são construídas em reflexão para poder alterar classes, tipos e objetos em tempo de execução.
Essa linguagem precisa de seus super-heróis para escrever códigos testáveis, e nós os conhecemos bem — protocolos e extensões! Não importa qual implementação seja — classe, enum ou struct — o propósito dos protocolos permanece — definir abstrações e adicionar novas funcionalidades a tipos, mesmo aqueles que não devemos.
O que podemos fazer para zombar?
Use a metaprogramação para gerar uma implementação simulada completa.
São muitas bibliotecas fazendo o trabalho simulado para o teste de unidade, a maioria dos choupos são Cuckoo e swifyMocky .
Neste artigo, darei uma visão geral de como podemos fazer a zombaria usando o SwiftyMocky.
SwiftyMocky
https://github.com/MakeAWishFoundation/SwiftyMocky
Vantagens
- Simule automaticamente os protocolos Swift
- Genéricos de suporte
- Configuração simples e leve
- Boa documentação
- Sintaxe agradável e fácil (que utiliza preenchimento automático)
- Marcar protocolos para serem ridicularizados
- Todos os protocolos nos diretórios de origem, com esta anotação, serão adicionados a Mock.generated.swift
- Todos os mocks possuem um método fornecido (acessível como método de instância ou função global), com sintaxe fácil de usar, permitindo especificar quais devem ser os valores de retorno para determinados métodos (com base em atributos especificados)
- Todos os mocks possuem método de verificação (acessível tanto como método de instância quanto como função global), com sintaxe fácil de usar, permitindo verificar se um método foi chamado no mock e quantas vezes. Ele também fornece uma maneira conveniente de especificar se os atributos do método são importantes (e quais)
- Todos os mocks possuem o método perform (acessível tanto como método de instância ou função global), com sintaxe fácil de usar, permitindo especificar o fechamento, que será executado após a chamada do método stubbed
Configurar
- Instalar usando Cocoapods
- Instalar CLI para fácil geração de simulação
> swiftymocky doctor # valida sua configuração
> swiftymocky gerar # gerar mocks
- A geração de mocks é baseada no arquivo Mockfile.yml com possibilidade de excluir regras swift lint usando excludeSwiftLintRules
Não temos tantas ferramentas que nós, como desenvolvedores, temos para zombar do Swift, com alguns limites rígidos devido ao acesso limitado ao tempo de execução do idioma. E aqui chegamos à questão crítica - usar ou não usar estruturas externas para zombaria.
O conhecido tio Bob não os usa tanto quanto possível; ele diz: “O ponto em que você começa a precisar de uma estrutura de simulação é exatamente o ponto em que o acoplamento entre seus testes e código está ficando muito alto. Depois disso, no entanto, você deve se esforçar para manter o acoplamento entre seu código e testes baixo o suficiente para não precisar usar a estrutura de simulação com muita frequência.”
Obrigado por ler! Se você gostou deste artigo, bata palmas para que outras pessoas possam ler também :)
Codificação feliz :v: