Estamos construindo um clone do Google Photose testar isso é extremamente difícil!
Como testamos se nossaaplicação Javainicia os processos corretos do ImageMagick ou se os miniaturas resultantes são do tamanho correto e de fato são miniaturas, e não apenas fotos aleatórias de gatos? Como testamos diferentes versões do ImageMagick e sistemas operacionais?
O que está no Vídeo
00:00 Introdução
Começamos o vídeo com uma visão geral do que torna tão complicado testar nosso clone do Google Photos. Como no último episódio, começamos a extrair miniaturas das imagens, mas agora precisamos de uma maneira de testar isso. Como isso é feito por meio de um processo externo do ImageMagick, estamos em uma jornada.
01:05 Configurando JUnit e Escrevendo os Primeiros Métodos de Teste
Primeiro, configuraremos o JUnit 5. Como não estamos usando um framework comoSpring Boot, serve como um ótimo exercício adicionar o conjunto mínimo de bibliotecas e configuração que nos permite começar com o JUnit. Além disso, escreveremos alguns esqueleto de métodos de teste, enquanto pensamos sobre como abordaríamos o teste de nosso código existente e cuidando da nomenclatura de métodos de teste, etc.
04:19 Implementando Detecção de Versão do ImageMagick
No último episódio, percebemos que executar nosso aplicativo Java em diferentes sistemas leva a resultados inesperados ou erros simples. Isso ocorre porque diferentes versões do ImageMagick oferecem um conjunto diferente de APIs que precisamos chamar. Portanto, precisamos ajustar nosso código para detectar a versão do ImageMagick instalada e também adicionar um método de teste que verifique se o ImageMagick está realmente instalado, antes de executar quaisquer testes.
10:32 Trade-Offs de Teste
Como é aparente com a detecção das versões do ImageMagick, o verdadeiro problema é que, para alcançar 100% de cobertura de teste com uma variedade de sistemas operacionais e versões instaladas do ImageMagick, você precisaria de uma configuração de CI/CD bastante elaborada, que não está no escopo deste projeto. Então, estamos discutindo os prós e contras do nosso enfoque.
12:00 Implementando @EnabledIfImageMagickIsInstalled
No entanto, o que podemos fazer é garantir que o resto de nossa suíte de testes só seja executado se o ImageMagick estiver instalado. Assim, escreveremos uma anotação personalizada do JUnit 5 chamada EnabledIfImageMagickIsInstalled
que você pode adicionar a quaisquer métodos de teste ou até mesmo a classes inteiras para habilitar esse comportamento. Se o ImageMagick não estiver instalado, os testes simplesmente não serão executados em vez de exibir uma mensagem de erro feia.
16:05 Testando Criação de Miniaturas com Sucesso
O maior problema a enfrentar é: como podemos afirmar corretamente que as miniaturas foram criadas corretamente? Aprofundaremos esta questão testando o código de saída do ImageMagick, estimando os tamanhos dos arquivos e também carregando a imagem, e certificando-nos de que ela possui a quantidade correta de pixels. Tudo isso com a ajuda do AssertJ e suas SoftAssertions para facilmente combinar múltiplas afirmações em uma.
23:59 Ainda Só Funciona No Meu Computador
Mesmo após ter testado todo o nosso fluxo de trabalho, ainda precisamos nos certificar de chamar uma API diferente do ImageMagick para versões diferentes. Podemos rapidamente adicionar esse comportamento para dar suporte tanto ao IM6 quanto ao IM7, e pronto.
25:53 Implantação
Hora de implantar o aplicativo no meu NAS. E desta vez, tudo funciona conforme o esperado!
26:20 Reflexões Finais Sobre Testes
Neste episódio, fizemos uma quantidade justa de testes. Vamos resumir todos os desafios e estratégias de teste pragmáticas que aprendemos.
27:31 O que Vem Depois
Vamos terminar o episódio analisando o que vem a seguir: problemas de multithreading!
Até o próximo episódio.
Source:
https://dzone.com/articles/i-dont-tdd-pragmatic-testing-with-java