2008-10-17 9 views
4

J'ai écrit une méthode savefile pour enregistrer un objet en xml. Mais je ne suis pas sûr de savoir comment tester la méthode dans NUnit. Ai-je besoin de créer un fichier d'exemple manuellement et de comparer la chaîne entre les fichiers? Existe-t-il de meilleurs moyens de tester la méthode?Comment écrire une méthode de test dans NUnit pour tester une méthode savefile?

Merci pour votre réponse.

+0

Vous voudrez peut-être reformuler votre question .. dans le cas où vous cherchez spécifiquement à vérifier xml généré. Comment écrire un test pour vérifier la sortie XML? – Gishu

Répondre

0

Voici ce que je fais - cela fonctionne pour moi, mais il pourrait ne pas être à votre cahier des charges.

Dans le démontage, je m'assure que je supprime tous les fichiers que j'ai pu créer dans le cadre de la suite. Donc oui, assurez-vous que le fichier est un fichier scratch juste pour tester

Dans la méthode de test, je supprime le fichier s'il existe (il ne devrait pas, comme le démontage en a déjà pris soin), puis affiche le fichier XML affirme ensuite que le fichier existe. Je recharge ensuite le fichier dans un graphe d'objet ou dans le DOM xml et interroge l'état à travers autant d'assertions que nécessaire. Si vous pouvez écrire des fichiers et si votre conception vous permet d'écrire dans un éditeur de texte générique ou un rédacteur xml, vous pouvez ignorer le fichier et remplacer les appels par un éditeur de chaîne à la place et interroger une chaîne. Beaucoup plus propre mais il ne vérifie pas que la persistance du fichier fonctionne ou non.

1

Ugh, validation de la sortie XML. Bienvenue en enfer :)

Une méthode qui a fonctionné pour moi était de générer un objet XmlDocument en mémoire. Ensuite, exécutez votre méthode SaveFile et chargez-la dans un autre XmlDocument. Parcourez les deux XmlDocuments de manière récursive, en comparant tous les éléments et attributs.

Malheureusement, écrire du XML avec des objets C# est gros et encombrant. Je recommande de tester les sous-sections à la fois. Votre fichier de sauvegarde contient peut-être un sous-élément <FileList>, un sous-élément <Cups> et un sous-élément <Rifles>. Dans ce cas, écrivez une série de tests pour vous assurer que chaque sous-section est faite correctement, au lieu de la sortie globale.

1

Ce serait plus facile si vous montriez le code. Mon chemin autour de ceci, est d'ajouter une couche d'abstraction. Votre méthode Save ne gère pas directement XmlWriter. Au lieu de cela, créez des wrappers qui seront chacun capables de sauvegarder un petit bloc logique de vos données dans xml et de les tester.

pour chaque Wrapper ont une méthode comme

void Persist(XmlWriter writer); 

et Sauvons juste recueillir les données des emballages. En d'autres termes, il serait de la responsabilité de Wrappers de sauvegarder correctement les données, mais chacune sera responsable de la petite partie de celle-ci. Là vous pouvez le tester en comparant les chaînes (mettez StringWriter dans XmlWriter que vous passez dans la méthode Persist)

0

Créez votre classe de façon à avoir SaveFile (string fileName) et SaveFile (writer XmlWriter). SaveFile (nom de fichier chaîne) a seulement besoin de créer un XmlWriter pour le fichier nommé et d'appeler SaveFile (writer). Faites vos tests unitaires approfondis sur la méthode SaveFile (writer XmlWriter) pour laquelle vous pouvez utiliser un XmlWriter faux. Testez certaines conditions d'erreur - si vous prévoyez de les gérer au lieu de les propager - sur la méthode SaveFile (nom de fichier chaîne). Selon la gestion des erreurs, il se peut que vous n'ayez pas besoin de créer un fichier.

BTW, vous n'avez pas besoin d'exposer votre méthode en utilisant le XmlWriter directement si vous ne voulez pas.Vous pouvez le rendre privé et utiliser un accesseur pour l'invoquer dans vos tests.

1

options

  1. Simplistic: 'fichier d'or' utilisation approche. Créez un fichier de sortie attendu en lecture seule en tant que ressource. Faire un octet/chaîne sage comparer avec le fichier généré réel.
  2. J'ai entendu dire que certaines personnes utilisent XmlUnit à cette fin. Je ne l'ai jamais utilisé personnellement, mais peut-être utile de jeter un oeil à