143 votes

MSTest a-t-il un équivalent à NUnits TestCase?

Je trouve la fonctionnalité TestCase dans NUnit très utile comme moyen rapide de spécifier des paramètres de test sans avoir besoin d’une méthode distincte pour chaque test. Y at-il quelque chose de similaire dans MSTest?

  [TestFixture]  
 public class StringFormatUtilsTest  
 {  
     [TestCase("tttt", "")]  
     [TestCase("", "")]  
     [TestCase("t3a4b5", "345")]  
     [TestCase("3&5*", "35")]  
     [TestCase("123", "123")]  
     public void StripNonNumeric(string before, string expected)  
     {  
         string actual = FormatUtils.StripNonNumeric(before);  
         Assert.AreEqual(expected, actual);  
     }  
 }  
 

36voto

Thwaitesy Points 112

Je sais que c'est une réponse tardive mais j'espère que ça aide les autres.

J'ai cherché partout une solution élégante et fini par écrire un moi-même. Nous l'utilisons dans plus de 20 projets, avec des milliers de tests unitaires et des centaines de milliers d'itérations. N'a jamais manqué un battement.

https://github.com/Thwaitesy/MSTestHacks

1) Installer le NuGet package.

2) Hériter de votre classe de test à partir de TestBase

public class UnitTest1 : TestBase
{ }

3) Créer une Propriété, un Champ ou une Méthode, qui renvoie IEnumerable

[TestClass]
public class UnitTest1 : TestBase
{
    private IEnumerable<int> Stuff
    {
        get
        {
            //This could do anything, get a dynamic list from anywhere....
            return new List<int> { 1, 2, 3 };
        }
    }
}

4) Ajouter le MSTest source de données de l'attribut à votre méthode de test, pointant vers l'interface IEnumerable nom ci-dessus. Ce doit être pleinement qualifié.

[TestMethod]
[DataSource("Namespace.UnitTest1.Stuff")]
public void TestMethod1()
{
    var number = this.TestContext.GetRuntimeDataSourceObject<int>();

    Assert.IsNotNull(number);
}

Résultat final: 3 itérations tout comme la normale de la source de données :)

using Microsoft.VisualStudio.TestTools.UnitTesting;
using MSTestHacks;

namespace Namespace
{
    [TestClass]
    public class UnitTest1 : TestBase
    {
        private IEnumerable<int> Stuff
        {
            get
            {
                //This could do anything, get a dynamic list from anywhere....
                return new List<int> { 1, 2, 3 };
            }
        }

        [TestMethod]
        [DataSource("Namespace.UnitTest1.Stuff")]
        public void TestMethod1()
        {
            var number = this.TestContext.GetRuntimeDataSourceObject<int>();

            Assert.IsNotNull(number);
        }
    }
}

13voto

Bramha Ghosh Points 3860

MSTest ne prend pas en charge les RowTests - mais cela peut être utile pour la simuler en extrayant les valeurs de test d'une source de données externe. Je n'ai pas essayé, alors YMMV.

http://codeclimber.net.nz/archive/2008/01/18/How-to-simulate-RowTest-with-MS-Test.aspx

3voto

Elena Points 959

Vous trouverez ici un bon tutoriel sur la rédaction d’extensions MSTest offrant les fonctionnalités dont vous avez besoin:

Extension du type de test d'unité Visual Studio, partie 2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X