Comme pour la partie précédente, nous allons partir d’un test unitaire qui échoue : T_WebPageTask.CheckCreation. Allez dans le menu Test | Windows | Test Explorer et choisissez Run Selected test avec un clic-droit sur le test CheckCreation :
Le code en question est le suivant :
[TestMethod]
public void CheckCreation()
{
// Arrange
DateTime now = DateTime.Now;
Thread.Sleep(1001);
string name = "Video Relativité Restreinte";
string url = "https://sciencepost.fr/2017/03/belle-animation-expliquer-relativite-deinstein/";
ContentCategory category = ContentCategory.Science;
// Act
WebPageTask task = new WebPageTask(name, category, url);
// Assert
Assert.AreEqual(name, task.Name);
Assert.AreEqual(category, task.Category);
Assert.IsTrue(now < task.Start);
Assert.AreEqual(url, task.Url.AbsolutePath);
}
De quoi allons-nous avoir besoin pour remonter à la source du problème ?
Un des Assert a échoué : cela signifie donc que la valeur d’une des propriétés n’est pas celle attendue. Il va donc falloir être capable de détecter lorsque la valeur d’une propriété a changé ou de facilement voir sa valeur lorsqu’on exécute le code pas à pas. Voyons comment le faire ensemble !
Nous allons commencer à déboguer ce test unitaire en mettant un point d'arrêt (comme nous l'avons vu dans la section précédente) au niveau de la création de la WebPageTask pour voir la valeur des différentes propriétés :
Une fois l'exécution suspendue, le panneau Locals apparaît automatiquement : il est rempli par le débogueur avec les variables de la méthode courante :
La première colonne contient leur nom, la seconde leur valeur et la dernière leur type.
Dans le cas d'une chaîne de caractères, il est même possible d'avoir un visualiseur dédié en fonction du type de chaîne, comme XML, HTML et JSON :
Si l'on descend dans le code du constructeur de WebPageTask avec Step Into (F11), le contenu des Locals s'adapte en ne montrant que les paramètres passés au constructeur ainsi que l'object courant dont le nom est toujours this :
Si une des variables locales est d'un type complexe (c’est-à-dire contenant des champs ou des propriétés), un petit triangle indique qu'il est possible de les visualiser. Ici, en cliquant sur le triangle à côté de this, on peut voir que les propriétés de cette instance de WebPageTask n'ont pas encore été initialisées. C'est normal puisque nous sommes dans son constructeur :
Si l'on exécute l'appel à base par Step Over (F10), le contenu des propriétés ayant changé est mis à jour et garde une couleur rouge :
Dans notre cas, seul le Name a changé car la valeur par défaut de la catégorie était déjà Science.
Après avoir exécuté l'initialisation de l'URL, la valeur de propriété du même nom apparaît en rouge :
Il faut noter que l'expansion des structures de données complexes est possible, comme par exemple voir le contenu de la propriété URL :
Résumé
Ce chapitre vous a montré l’intérêt du panneau des Locals pour avoir l’état des variables en fonction d’où vous êtes dans la pile des appels. Vous verrez dans le prochain chapitre comment personnaliser l’affichage des instances de vos types afin de les visualiser plus facilement dans Visual Studio.