Estou trabalhando no processamento de imagens (principalmente OCR) e me pergunto como devo integrar testes de unidade no meu desenvolvimento.
Já estou usando testes de unidade para um tipo mais "comum" de código, mas ao lidar com código de processamento de imagem, não tenho certeza de como lidar com isso. Esse tipo de código sempre precisa de alguma entrada / saída de dados de imagem e zombar disso não é óbvio. Por enquanto, estou fazendo testes de integração, mas eles demoram um pouco para serem executados e eu gostaria de algumas idéias sobre como dividir esse tipo de código em testes de unidade, para que eu possa executá-los mais rapidamente.
Editar: a análise de um personagem pode passar por várias etapas que envolvem múltiplas operações de rotação, escala e morfologia. Essas etapas mudam frequentemente à medida que o algoritmo está sendo desenvolvido. Assim, a entrada e a saída esperada podem evoluir muito durante o teste. Cada caractere pode ter 100x100 pixels, portanto, é difícil codificá-los no código ou trabalhar com dados gerados.
fonte
Respostas:
Trabalho com software de gravação de vídeo / análise / streaming e enfrentamos um problema muito semelhante. Abaixo estava nossa solução, sem saber como isso funcionaria a longo prazo, mas por enquanto parece funcionar.
Salve imagens de entrada / saída como recursos em seu projeto de teste de unidade. Faça com que o teste de unidade verifique se, quando uma entrada específica é fornecida, essa saída específica é produzida.
9/10 vezes quando você refatorar o código e adicionar outra funcionalidade, você esperaria que o comportamento de suas rotinas de manipulação de imagens não mudasse; portanto, se todos os testes de unidade repentinos começarem a falhar, provavelmente ocorrerá um erro.
Por outro lado, se você fizer alterações no algoritmo real, isso também resultará em falha no teste de unidade. Nesse caso, você precisaria verificar manualmente / visualmente se os resultados estão corretos e, se ficarem bem, atualize os recursos da imagem para fazer o teste de unidade passar novamente.
Em nosso projeto, acabamos desenvolvendo fontes de vídeo "falsas" (ou zombarias, se você quiser), que podem fornecer dados para entrada e saída. Mas os dados em si não são falsos; na verdade, foram capturados usando classes auxiliares de gravação de dados de um sistema em execução quando executamos testes manuais e verificamos que tudo estava funcionando.
fonte