Dois-je écrire des tests unitaires pour les expressions régulières complexes dans mon application?
Je suis d'accord avec Doc Brown qui dans son commentaire note qu'il s'agit d'un cas spécial de test unitaire des composants internes .
Mais comme les regexes des composants internes ont quelques caractéristiques spéciales:
Mis à part le dogmatisme, la vraie question est de savoir s'il apporte une valeur à un test unitaire d'expressions régulières complexes. Il semble assez clair qu'il fournit de la valeur (que la regex fasse partie d'une interface publique ou non) si la regex est suffisamment complexe, car elle vous permet de trouver et de reproduire des bogues et d'éviter les régressions.
Regex peut être un outil puissant, mais ce n'est pas un outil auquel vous pouvez vous fier pour continuer à travailler si vous apportez des modifications même mineures à des regex complexes.
Créez donc de nombreux tests qui documentent les cas qu'il doit couvrir. Et créez de nombreux tests qui documentent les cas où il devrait échouer, s'il est utilisé pour la validation.
Chaque fois que vous devez changer vos expressions régulières, vous ajoutez les nouveaux cas en tant que tests, modifiez vos expressions régulières et espérez le meilleur.
Si j'étais dans une organisation qui en général n'utilisait pas de tests unitaires, j'écrirais quand même un programme de test qui testerait toutes les expressions rationnelles que nous utiliserions. Je le ferais même à mon propre rythme si je le devais, mes cheveux n'ont plus besoin de perdre de couleur.
Les expressions régulières sont du code avec le reste de votre application. Vous devez tester que le code fait globalement ce que vous attendez de lui. Cela a plusieurs objectifs:
Comme il y a un obstacle supplémentaire à surmonter en ayant du code dans un langage différent intégré au reste, vous devriez très probablement accorder cette attention supplémentaire au profit de la maintenance.
En bref, vous devez tester votre application, point final. Que vous testiez votre regex avec des tests automatisés qui l'exécutent de manière isolée, dans le cadre d'une plus grande boîte noire ou si vous vous contentez de la manipuler à la main, cela est secondaire au point que vous devez vous assurer qu'il fonctionne.
Le principal avantage des tests unitaires est qu'ils permettent de gagner du temps. Ils vous permettent de tester la chose autant de fois que vous le souhaitez maintenant ou à tout moment dans le futur. S'il y a une raison de croire que votre regex sera à tout moment refactorisé, modifié, obtiendra plus de contraintes, etc., alors oui, vous voulez probablement des tests de régression pour cela, ou quand vous le changez, vous devrez aller à travers une heure de réflexion sur tous les cas Edge afin que vous ne le cassiez pas. Cela, ou vous apprenez à vivre avec peur de votre code et ne le changez tout simplement jamais.