Puis-je répéter un test unitaire à plusieurs reprises sur une collection dans Visual Studio 2008?

voix
0

J'ai un test unitaire où je lance une méthode pour chaque élément dans une collection (en utilisant un foreach). À l'heure actuelle, j'ai un assert à la fin de l'foreach pour tester si la méthode retourne la valeur correcte. Cela fonctionne, mais le résultat est le test échoue lorsque la méthode échoue pour la première fois. Aucun élément de subsiquent de la collection sont testées.

Je voudrais courir essentiellement un test à part entière pour chaque élément de la collection. Le test est exécuté pour chaque élément, même si l'on échoue. Et le montre la fenêtre des résultats des tests donnent des données pour chaque passage.

Je sais que je peux utiliser une source de données pour exécuter un test pour chaque ligne dans une base de données, mais cela ne convient pas dans ce cas. Y at-il une autre façon?

Mon test actuel ressemble à:

public void TestXHTMLBlock()
        {
            foreach (XmlNode current in Test_Cases.SelectNodes(Test_Cases/Test_Case))
            {
                XHTMLBlock x = new XHTMLBlock(current.SelectSingleNode(Input).CreateNavigator(), );
                XmlDocument temp = new XmlDocument();
                temp.LoadXml(<Output> + x.sWordML(false) + </Output>);


                XmlDiff diff = new XmlDiff(XmlDiffOptions.IgnoreComments |
                                     XmlDiffOptions.IgnoreDtd |
                                     XmlDiffOptions.IgnoreNamespaces |
                                     XmlDiffOptions.IgnorePI |
                                     XmlDiffOptions.IgnorePrefixes |
                                     XmlDiffOptions.IgnoreWhitespace |
                                     XmlDiffOptions.IgnoreXmlDecl);

                StringBuilder str = new StringBuilder();
                XmlWriter xwrite = XmlWriter.Create(str);

                bool ret = diff.Compare(current.SelectSingleNode(Output), temp.SelectSingleNode(Output), xwrite);
                xwrite.Close();

                Assert.IsTrue(ret, current.SelectSingleNode(Description).InnerText);
            }
        }

Je sais que cela ressemble à un candidat de choix pour une source de données XML, mais je ne peux pas que pour travailler. La balise d'entrée contient du code XML qui la source de données tente d'analyser. Cela signifie que je ne peux pas accéder correctement dans mon test et l'analyseur de source de données sur certains selfs de mon XML d'entrée. Si je pouvais dire à l'analyseur XML DataSource pour traiter le XML interne sous forme de texte, qui fonctionnerait aussi bien ...

Créé 26/08/2009 à 22:41
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
1

Vous pouvez mettre le résultat de test d'un élément individuel dans une collection et d'affirmer après foreach si cette collection contient quoi que ce soit. Ci-dessous l'extrait de code exemple pour illustrer l'idée.

List<Item> errors = new List<Item>();
foreach(Item item in items)
{
   if( string.IsNullOrEmpty(item.Name))
   {
     errors.Add(item);
   }
} 
Assert.IsTrue(errors.Count == 0,"There are items with no name"); 

Si vous voulez voir plus de détails lorsque le test échoue, vous pouvez écrire une méthode utilitaire qui itère collection d'erreurs et génère un message détaillé que vous pouvez utiliser dans votre assert.

Créé 26/08/2009 à 22:53
source utilisateur

voix
0

J'envisager d'utiliser un StringBuilder et annexant une chaîne sur chaque erreur.

A la fin, vous pouvez vérifier si le StringBuilder est vide puis écrire à la console / debug / trace, ce qui recueille automatiquement votre cadre de tests unitaires et laissez l'échec du test par l'intermédiaire Assert.Fail () ou similaire

Créé 26/08/2009 à 22:57
source utilisateur

voix
0

Si vous utilisez nUnit 2.5.x, l' est ValueSourceAttributepeut - être ce que vous recherchez. Cela répéter tout le test une fois pour chaque membre du indiqué IEnumerable.

Créé 26/08/2009 à 22:56
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more