Maison >développement back-end >C++ >Comment puis-je transmettre des paramètres complexes aux tests théoriques xUnit ?
Passer des paramètres complexes à [Théorie]
Dans Xunit, l'attribut InlineData vous permet de créer des tests individuels pour chaque ensemble de données fourni. Cependant, que se passe-t-il si votre méthode prend un paramètre complexe, tel qu'une liste d'objets personnalisés ?
Pour gérer cette situation, XUnit propose l'attribut MemberData. En définissant une propriété qui renvoie IEnumerable
Exemple MemberData :
public class StringTests2 { [Theory, MemberData(nameof(SplitCountData))] public void SplitCount(string input, int expectedCount) { var actualCount = input.Split(' ').Count(); Assert.Equal(expectedCount, actualCount); } public static IEnumerable<object[]> SplitCountData => new List<object[]> { new object[] { "xUnit", 1 }, new object[] { "is fun", 2 }, new object[] { "to test with", 3 } }; }
Dans XUnit version 2.0 ou ultérieure, vous pouvez utiliser l'attribut [MemberData] sur une méthode qui renvoie IEnumerable< objet[]>. L'exemple suivant le démontre :
Exemple de données de membres surchargées :
public class StringTests3 { [Theory, MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))] public void IndexOf(string input, char letter, int expected) { var actual = input.IndexOf(letter); Assert.Equal(expected, actual); } } public class IndexOfData { public static IEnumerable<object[]> SplitCountData => new List<object[]> { new object[] { "hello world", 'w', 6 }, new object[] { "goodnight moon", 'w', -1 } }; }
En utilisant ces techniques, vous pouvez transmettre efficacement des paramètres complexes à vos tests théoriques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!