Passer des types de données simples tels que des chaînes, des entiers et des doubles comme paramètres aux tests [Théorie] dans Xunit est simple à l'aide d'attributs comme InlineData. Cependant, pour des paramètres plus complexes, la question se pose de savoir comment fournir de telles données.
XUnit propose l'attribut MemberData, qui permet de renvoyer un objet IEnumerable
Par exemple :
public class StringTests { [Theory, MemberData(nameof(SplitCountData))] public void SplitCount(string input, int expectedCount) { Assert.Equal(expectedCount, input.Split(' ').Length); } public static IEnumerable<object[]> SplitCountData => new List<object[]> { { "xUnit", 1 }, { "is fun", 2 }, { "to test with", 3 } }; }
Avant Xunit 2.0, vous pouviez utilisez l'attribut ClassData pour partager des générateurs de données entre des tests de différentes classes.
Pour exemple :
public class StringTests { [Theory, ClassData(typeof(IndexOfData))] public void IndexOf(string input, char letter, int expected) { Assert.Equal(expected, input.IndexOf(letter)); } } public class IndexOfData : IEnumerable<object[]> { // ... data and methods }
Dans Xunit 2.0 et versions ultérieures, MemberData peut prendre un paramètre MemberType pour spécifier un membre statique d'une autre classe.
Pour exemple :
public class StringTests { [Theory] [MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))] public void SplitCount(string input, int expectedCount) { Assert.Equal(expectedCount, input.Split(' ').Length); } }
Alternativement, vous pouvez toujours utiliser ClassData si vous préférez la séparation entre les générateurs de données et le test méthodes.
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!