web-dev-qa-db-fra.com

MSTest équivalent 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.

51
blaster

Est-ce que this aider?

Cette semaine, j'ajoutais des tests unitaires à un projet géré par TFS, j'ai donc décidé d'utiliser le framework de tests unitaires "core" disponible avec VS2008, et malheureusement il ne supporte pas les RowTests. Mais il a une fonctionnalité similaire appelée Test unitaire basé sur les données. Avec cette approche, il est un peu plus compliqué d'implémenter le scénario RowTest "simple", mais cela permet également d'en implémenter des plus compliqués.

19
Jorge Ferreira

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

[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);
}

En savoir plus ici

25
Israel Rodriguez

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

9
Aseem Bansal

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

1
smwikipedia

Ma réponse est similaire à @ oscar-e-fraxedas-tormo one.
Vous pouvez sous-classer l'une des classes générées contenant de 1 à 100 méthodes de test et fournir toute la 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;
    }
}

La classe Ha_ha_ha_Test contiendra 42 lignes générées (méthodes). Pour chacune de cette ligne, la méthode personnalisée GetNextDataRow sera appelée afin de fournir les données de test requises.

Plus de détails:

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

0
Dmytro Zharii