Die Übergabe einfacher Datentypen wie Zeichenfolgen, Ganzzahlen und Doubles als Parameter an [Theory]-Tests in Xunit ist mithilfe von Attributen unkompliziert wie InlineData. Bei komplexeren Parametern stellt sich jedoch die Frage, wie solche Daten bereitgestellt werden.
XUnit bietet das MemberData-Attribut an, mit dem Sie ein IEnumerable
Zum Beispiel:
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 } }; }
Vor Xunit 2.0 war dies möglich Verwenden Sie das ClassData-Attribut, um Datengeneratoren zwischen Tests in verschiedenen Klassen zu teilen.
Für Beispiel:
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 }
In Xunit 2.0 und höher kann MemberData einen MemberType-Parameter verwenden, um ein statisches Mitglied aus einer anderen Klasse anzugeben.
Für Beispiel:
public class StringTests { [Theory] [MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))] public void SplitCount(string input, int expectedCount) { Assert.Equal(expectedCount, input.Split(' ').Length); } }
Alternativ können Sie weiterhin ClassData verwenden, wenn Sie eine Trennung zwischen Datengeneratoren und Test bevorzugen Methoden.
Das obige ist der detaillierte Inhalt vonWie kann ich komplexe Parameter an die [Theorie]-Tests von Xunit übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!