66 votes

Équivalent MSTest pour les tests paramétrés de NUnit?

NUnit prend en charge une fonctionnalité dans laquelle vous pouvez spécifier un ensemble d'entrées de données pour qu'un test unitaire soit exécuté plusieurs fois.

 [RowTest]
[Row(1001,1,2,3)]
[Row(1,1001,2,3)]
[Row(1,2,1001,3)]
public void SumTests(int x, int y, int z, int expected)
{
   ...
}
 

Quelle est la meilleure façon d'accomplir ce même type de chose en utilisant MSTest? Je ne trouve pas un ensemble d'attributs similaire.

21voto

smink Points 39640

Serait - ce de l'aide?

Cette semaine, j'ai l'ajout de tests unitaires un projet qui est géré par TSF, j'ai donc décidé d'utiliser le "noyau" de l'unité cadre d'essais disponible avec VS2008, et, malheureusement, il n'a pas soutien RowTests. Mais il a un similaire fonctionnalité appelée Pilotées par les Données de Test. Avec cette approche, il est un peu plus compliquer à mettre en œuvre le "simple" RowTest scénario, mais il permet également pour mettre en œuvre plus compliquer ceux.

10voto

Aseem Bansal Points 553

Vous pouvez avoir cette capacité en écrivant une petite extension de mstest comme indiqué ici.

http://blogs.msdn.com/b/vstsqualitytools/archive/2009/09/04/extending-the-visual-studio-unit-test-type-part-2.aspx

1voto

smwikipedia Points 5491

En fait, la Paramétrée Unité de Test (PUT) est une généralisation naturelle de test de l'unité. Et Microsoft Research a lancé un projet appelé Pex qui permettra de générer de la METTRE pour votre Classe de Test (CUT) automatiquement. Pex est un auto test d'entrée de l'outil de production. Au lieu de préparer les données de test vous-même, le Pex outil permettra de trouver les entrées d'intérêt pour les paramètres de COUPE et de générer de l'unité des cas de test en conséquence. Veuillez vérifier ici.

1voto

Dmytro Zharii Points 181

Ma réponse est similuar à @oscar-e-fraxedas-tormo un.
Vous pouvez sous-classe à partir de l'une des classes générées qui ont de 1 à 100 méthodes d'essai à l'intérieur et à fournir tous les test de logique dans la classe dérivée. Dans l'exemple ci-dessous:

[TestClass]
public class Ha_ha_ha_Test: MsTestRows.Rows.TestRows_42<string>
{
    public override void TestMethod(string dataRow, int rowNumber)
    {
        Console.WriteLine(dataRow);
        Assert.IsFalse(dataRow.Contains("3"));
    }

    public override string GetNextDataRow(int rowNumber)
    {
        return "data" + rowNumber;
    }
}

La classe Ha_ha_ha_Test contiendra 42 généré lignes (les méthodes). Pour chacun de cette ligne, la méthode personnalisée GetNextDataRow seront appelés dans l'ordre de l'obligation de fournir des données de test.

Plus de détails:

https://github.com/dzhariy/mstest-rows

-3voto

Vous pouvez créer une classe de base avec la méthode de test et les paramètres en tant que propriétés virtuelles. Lorsque vous héritez de cette classe, il vous suffit de remplacer les propriétés par les valeurs souhaitées. Veuillez consulter l'exemple de code:

 public class Operation
{
    public static int Add(int x, int y)
    {
        return x + y;
    }
}

[TestClass]
public class AddTests : WorkItemTest
{
    protected virtual int First{get { return 0; }}
    protected virtual int Second{get { return 0; }}

    [TestInitialize]
    public virtual void Init()
    {
        //Init code
    }

    [TestCleanup]
    public virtual void Clean()
    {
        //Clean code
    }

    [TestMethod]
    [Description("x+y = y+x")]
    public virtual void Test_operation_commutativity()
    {
        Assert.AreEqual(Operation.Add(Second, First), Operation.Add(First, Second));
    }
}

[TestClass]
public class AddPositiveTest : AddTests
{
    protected override int First { get { return 1; } }
    protected override int Second { get { return 2; } }
}

[TestClass]
public class AddNegativeTest : AddTests
{
    protected override int First { get { return -1; } }
    protected override int Second { get { return -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