Übergabe komplexer Parameter an [Theorie]
XUnit stellt das InlineData-Attribut bereit, das es Benutzern ermöglicht, mehrere Tests mit einfachen Datenparametern zu generieren. Beim Umgang mit komplexeren Parametern, beispielsweise einer Liste benutzerdefinierter Klassen, ist jedoch ein anderer Ansatz erforderlich.
MemberData- und ClassData-Attribute
XUnit bietet mehrere Optionen für Übergabe komplexer Parameter an [Theory]-Methoden. Ein Ansatz besteht darin, das MemberData-Attribut zu verwenden. Dieses Attribut weist XUnit an, eine Eigenschaft auszuführen, die ein IEnumerable
Eine andere Option ist die Verwendung des ClassData-Attributs. ClassData funktioniert ähnlich wie MemberData, ermöglicht jedoch die gemeinsame Nutzung von Datengeneratoren zwischen Tests in verschiedenen Klassen oder Namespaces. Es trennt auch die „Datengeneratoren“ von den eigentlichen Testmethoden.
ClassData-Beispiel mit statischer Member-Unterstützung
Um ClassData mit statischer Member-Unterstützung zu verwenden, können Sie eine definieren Klasse mit einer statischen Eigenschaft, die IEnumerable
public class IndexOfData { public static IEnumerable<object[]> SplitCountData => new List<object[]> { new object[] { "hello world", 'w', 6 }, new object[] { "goodnight moon", 'w', -1 } }; }
In Ihrer Testklasse können Sie dies tun Wenden Sie dann das [Theory]-Attribut an und geben Sie das statische Mitglied mithilfe der MemberType-Eigenschaft des Attributs an:
[Theory, MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))] public void IndexOf(string input, char letter, int expected) {...}
Durch die Nutzung dieser Attribute können Sie komplexe Parameter an Ihre [Theory]-Methoden übergeben und so Tests durchführen verschiedene Szenarien effizient.
Das obige ist der detaillierte Inhalt vonWie kann ich komplexe Parameter an die [Theorie]-Methoden von XUnit übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!