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.
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.
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
Vous pouvez avoir cette capacité en écrivant une petite extension de mstest comme indiqué ici.
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 .
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.