mercredi 17 mars 2010

String.Join - comment utiliser intelligement les Watch de Visual Studio

Voila un exemple issu d'un cas bien pratique.

Au cours de mon travail, je me suis retrouvé à documenter les cas d'utilisation d'une fonction permettant de tester les interactions médicamenteuses.
Cette fonction, visible ci-dessous, prends quelques paramètres donc certains sont des listes de string (les CNK étant les codes barre identifiant les médicaments).
public static List<InteractionOverview> GetDrugInteraction(
   string LangCode, 
   string ArticleCNKNr, 
   List<string> HistCNk, 
   List<string> delivCNK)

Bref, documenter un scénario ou un nouveau médicament au cours d'une vente (et impliquant la comparaison avec l'historique) représente certes 4 paramètres mais des listes qui peuvent devenir bien longues.

Copier le contenu de ces listes dans un document (pour documentation, tests ultérieurs ou comparaison) peut vite devenir fastidieux.
La capture suivante montre l'état d'un des 4 paramètres dans le débogueur.
J'avais une dizaine de cas à documenter... avec des ventes successives (on repasse donc par la même fonction et rajoutant à chaque fois un nouvel article à la vente).


Même les "Watch" ne peuvent pas se montrer bien utile... sauf si on les utilisent intélligement.

Utilisation intelligente du watch
Un watch permet de visualiser une valeur d'objet, variable, etc durant un processus en cous de débogage.
Un watch permet également d'afficher le contenu d'une expression! Et ca, c'est vachement utile.

En utilisant  une expression et String.Join, j'ai réduit mon travail de capture à une opération trivial, rapide et simple... tout ce qu'il me fallait pour travailler vite, efficacement et sans erreur.

Le watch de la mort qui tue 
Le principe est simple.
  1. On concatène les valeurs des arrays avec String.Join
  2. On concatène les paramètres (et résultats des String.Join) dans une string.
"ArtCnk: "+ArticleCNKNr.ToString()+"; HistCnk: "+String.Join(", ", HistCNk.ToArray() )+"; DelivCNK: "+String.Join( ", ", delivCNK.ToArray() )

Ce que le watch produit
ArtCnk: 1677780; HistCnk: 0119065, 0129890, 0129908, 0245415, 1077718, 1652049, 1652064, 1690262; DelivCNK: 1571272, 1542935, 2179612, 0102376

ArtCnk: 1265453; HistCnk: 2021848, 2024156, 2034981, 2035541; DelivCNK: 2024156, 1468552, 2322238, 0453480
Avec de tels résultats, la capture d'information devient vraiment trivial :-)

Aucun commentaire: