Question

NUnit prend en charge une fonction où vous pouvez spécifier un ensemble d'entrées de données pour un test unitaire pour être 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 peux pas trouver un ensemble similaire d'attributs.

Était-ce utile?

La solution

d'aide?

  

Cette semaine, j'ajoutais quelques tests unitaires   à un projet qui est géré par TFS,   alors j'ai décidé d'utiliser l'unité « de base »   cadre de tests disponibles avec   VS2008, et malheureusement, il ne   RowTests de soutien. Mais il a une même   fonctionnalité appelée Unité-piloté par les données d'essai.   Avec cette approche, il est un peu plus   compliquer la mise en œuvre de la « simple »   RowTest scénario, mais il permet aussi   pour mettre en œuvre les plus compliquer.

Autres conseils

Pour ceux qui utilisent MSTest2, DataRow + DataTestMethod est disponible pour faire exactement ceci:

[DataRow(Enum.Item1, "Name1", 123)]
[DataRow(Enum.Item2, "Name2", 123)]
[DataRow(Enum.Item3, "Name3", 456)]
[DataTestMethod]
public void FooTest(EnumType item, string name, string number)
{
    var response = ExecuteYourCode(item, name, number);

    Assert.AreEqual(item, response.item);
}

Pour en savoir plus ici

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

En fait, le test unitaire paramétrées (de PUT) est une généralisation naturelle de test unitaire. Et Microsoft Research a un projet appelé Pex qui va générer la PUT pour votre classe sous test (CUT) automatiquement. PEX est un outil de génération d'entrée de test automatique . Au lieu de préparer les données de test vous-même, l'outil Pex trouvera le entrées d'intérêt pour les paramètres de la CUT et générer les cas de tests unitaires en conséquence. S'il vous plaît vérifier .

Ma réponse est similuar à @ e-oscar-fraxedas-Tormo un.
Vous pouvez sous-classe d'une des classes générées qui ont de 1 à 100 méthodes d'essai à l'intérieur et fournissent toute logique de test 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;
    }
}

Le Ha_ha_ha_Test de classe généré contient des rangées de 42 (méthodes). Pour chacun de cette ligne, la méthode personnalisée GetNextDataRow sera appelée afin de fournir des données de test requis.

Plus de détails:

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

Vous pouvez créer une classe de base avec la méthode d'essai et les paramètres que les propriétés virtuelles. Lorsque vous héritez de cette classe il vous suffit de remplacer les propriétés avec les valeurs souhaitées. S'il vous plaît voir le code exemple:

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; } }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top