Nous avons un bug à corriger, et comme tout bon TDD, je veux écrire un test qui échoue pour représenter le bug en premier. Le bug est dans une méthode qui prend un type plutôt complexe en entrée. Le bogue ne se reproduira que lorsque le type complexe aura une certaine combinaison de valeurs de propriétés définies. Jusqu'à présent, j'ai reproduit le bogue et, dans le débogueur, je peux voir la valeur d'exécution du type complexe. Maintenant, j'ai besoin de créer ce type complexe dans la section "Arranger" de mon test d'unité afin que je puisse le nourrir à la méthode buggy dans la section "Act" du test unitaire.Débogueur Visualizer pour générer le code Initialisateur d'objet
Je peux écrire un grand bloc de code objet initialiseur, à la main, comme le suivant:
var cats =
new List<Cat>
{
new Cat {Name = "Sylvester", Age = 8},
new Cat {Name = "Whiskers", Age = 2}
};
ou même quelque chose comme ceci:
var cats = new List<Cat>();
var cat1 = new Cat();
cat1.Name = "Sylvester";
cat1.Age = 8;
cats.Add(cat1);
var cat2 = new Cat();
cat2.Name = "Whiskers";
cat2.Age = 2;
cats.Add(cat2);
Rien n'y fantaisie. Le seul problème est la partie "à la main" - le type complexe dans mon cas n'est pas aussi trivial que l'exemple ci-dessus.
Je peux également afficher l'objet, dans le débogueur, avec l'un des visualiseurs de débogage intégrés. J'ai donc pensé que j'écrirais un Visualizer Debugger personnalisé qui va générer le code d'initialisation de l'objet pour moi. Pour l'utiliser, je reproduis le problème dans le débogueur, j'ouvre la fenêtre QuickWatch et sélectionne mon visualiseur personnalisé.
Une autre option consisterait à écrire une implémentation de sérialisation personnalisée qui "sérialiserait" un bloc de code d'initialisation d'objet. Pour utiliser cela serait un peu plus difficile que de simplement tirer vers le haut de la fenêtre QuickWatch, mais cela pourrait fonctionner.
Avant d'aborder ce problème moi-même, quelqu'un a-t-il fait quelque chose comme ça? Mind partage un extrait de code? Ou est-ce que quelqu'un pourrait suggérer une autre approche?
P.S. Dans mon cas, le type de l'objet est une sous-classe d'une classe de base abstraite. je voulais juste le mentionner.
Je sais que cette question a été posée en arrière mais je réponds simplement parce que je peux. Je l'ai implémenté juste pour mon usage personnel. Détails à http://mrvshah.wordpress.com/2011/10/06/debug-visualizer-convert-an-object-to-code/ Code source à https://github.com/mrvshah/CreateCodeDebugVisualizer –