Je travaille dans le traitement d'images (principalement OCR) et je me demande comment intégrer des tests unitaires dans mon développement.
J'utilise déjà des tests unitaires pour un type de code plus "commun" mais quand je traite du code de traitement d'image, je ne sais pas comment le traiter. Ce type de code a toujours besoin d'une entrée / sortie de données d'image et se moquer de cela n'est pas évident. Pour l'instant, je fais principalement des tests d'intégration, mais ils prennent un certain temps à s'exécuter et j'aimerais avoir des idées sur la façon de décomposer ce type de code en tests unitaires afin de pouvoir les exécuter plus rapidement.
Modifier: l'analyse d'un personnage peut passer par de nombreuses étapes impliquant plusieurs opérations de rotation, de mise à l'échelle et morphologiques. Ces étapes changent souvent au fur et à mesure du développement de l'algorithme. Ainsi, l'entrée et la sortie attendues peuvent beaucoup évoluer lors des tests. Chaque caractère peut mesurer 100 x 100 pixels, il est donc hors de question de les coder en dur dans le code ou de travailler avec les données générées.
la source
Réponses:
Je travaille avec des logiciels d'enregistrement vidéo / d'analyse / de streaming et nous avons rencontré un problème très similaire. Ci-dessous était notre solution, je ne sais pas comment cela fonctionnera à long terme, mais pour l'instant cela semble fonctionner.
Enregistrez les images d'entrée / sortie en tant que ressources dans votre projet de test unitaire. Demandez ensuite à un test unitaire de vérifier que lorsqu'une entrée spécifique est donnée, cette sortie spécifique est produite.
9/10 fois lorsque vous refactorisez le code et ajoutez d'autres fonctionnalités, vous vous attendez à ce que le comportement de vos routines de gestion d'image ne change pas, donc si tout d'un coup les tests unitaires commencent à échouer, cela est probablement dû à une erreur.
D'un autre côté, si vous apportez des modifications à l'algorithme réel, cela entraînera également l'échec du test unitaire. Dans ce cas, vous devrez vérifier manuellement / visuellement que les résultats sont corrects et s'ils semblent bons, puis mettre à jour les ressources d'image pour que le test unitaire réussisse à nouveau.
Dans notre projet, nous avons fini par développer des sources vidéo «fausses» (ou simulées si vous voulez), qui peuvent nous alimenter en données à la fois pour l'entrée et la sortie. Mais les données elles-mêmes ne sont pas fausses, elles ont en fait été capturées à l'aide de classes d'enregistrement de données auxiliaires à partir d'un système en cours d'exécution lorsque nous avons effectué des tests manuels et vérifié que tout fonctionnait.
la source