Como testar o código Combine no Swift
Testar nosso código é uma parte fundamental do processo de desenvolvimento.
Mas, se estivermos usando o framework Combine, isso pode não ser intuitivo à primeira vista. Isso não significa que não possa ser feito. Só precisamos nos aprofundar em alguns conceitos mais avançados que o Swift nos fornece.
Vamos dar uma olhada em como podemos facilmente incluir testes de unidade em nosso código Combine.
Vamos começar observando o seguinte gerenciador que simula o manuseio de um semáforo.
De nosso artigo inicial Combine, sabemos que, adicionando o wrapper @Published, obtemos um Publisher gratuito que podemos acessar usando o caractere $.
teste
Antes de nos aprofundarmos em como realmente testar o código Combine, vamos revisar alguns conceitos básicos sobre o teste de unidade. Podemos resumir em três passos.
- Etapa 1: Defina o que você deseja testar.
- Passo 2: Execute a operação que deseja testar com o valor definido no Passo 1.
- Passo 3: Avalie o resultado obtido no Passo 2.
Este é um exemplo muito simples para que você possa entender o conceito. Primeiro definimos nosso valor esperado para o teste, uma luz vermelha. Em seguida, chamamos uma operação que altera o valor da luz atual para vermelho. E, finalmente, garantimos que o valor da luz atual seja o mesmo que o esperado.
Tudo bem, mas o que devemos fazer se quisermos testar a simulateFlow
função? Você pode notar que dentro dessa função estamos alterando a propriedade light três vezes. Assim, ao final da execução da função, o valor da propriedade deve mudar de verde para amarelo, de amarelo para vermelho e por fim de vermelho para verde.
Como você pode imaginar, para testar a função, precisamos garantir que o valor da propriedade tenha o valor correto no final, mas o mais importante é garantir que todas as alterações de valor (de uma para outra) estejam corretas .
Expectativas
XCTestExpectations são um tipo de objeto que a Apple nos fornece para testar código assíncrono. Basicamente, você cria uma expectativa no início do seu teste e quando certas condições são atendidas você cumpre essa expectativa. A execução do teste aguardará até que a expectativa seja atendida ou quando um timeout expirar.
Portanto, para testar nossa função, precisaremos esperar até coletarmos todos os valores esperados que sabemos que a currentLight
propriedade deve mudar. Então, cumpriremos a expectativa se obtivermos todos os valores. Caso contrário, o teste falhará devido ao tempo limite.
Pensando nisso, agora temos a ferramenta certa para criar um novo teste para nossa simulateFlow
função
Vamos decompor o código:
Passo 1
- Criamos uma nova expectativa para usar em nosso teste.
- Definimos os valores esperados que sabemos que a propriedade deve mudar em algum momento.
- Também criamos uma nova lista vazia que vamos usar para armazenar os valores que receberemos do Editor.
- Começamos a ouvir os valores do Editor.
- Chamamos a função para começarmos a receber as mudanças de valor da propriedade.
- Esperamos que a expectativa seja atendida ou que o timeout seja atingido.
- Avaliamos se os valores recebidos que obtivemos estão corretos.
Testar o código Combine é muito fácil quando você entende o potencial das expectativas. Embora tenhamos visto um exemplo muito curto e simples, você pode usar essa mesma técnica para testar soluções mais complexas.
Por exemplo, você pode aplicar esses princípios para testar os estados de seu ViewModel em uma arquitetura MVVM ou para testar algumas chamadas de rede simuladas.
Você pode querer verificar meus artigos anteriores sobre Combine.
Introdução ao framework Combine no Swifthttps://blorenzop.medium.com/form-validation-with-combine-4988adcc3b0
Tem alguma pergunta? Sinta-se à vontade para me enviar uma mensagem . Se você gosta do meu conteúdo, pode se inscrever na minha página do Medium para ser notificado diretamente na sua caixa de entrada sempre que eu publicar um novo artigo.
Se você gosta de me apoiar, pode me seguir no GitHub ou no Twitter .