Heim >Backend-Entwicklung >C++ >Wie übergebe ich komplexe Parameter an theoriebasierte Unit-Tests in xUnit?
Unit-Test-Frameworks wie xUnit bieten praktische Funktionen für datengesteuerte Tests. Wenn es sich bei den Parametern der zu testenden Methode jedoch um komplexe Datenstrukturen wie Listen benutzerdefinierter Klassen handelt, reicht das InlineData-Attribut nicht aus.
Um diese Herausforderung anzugehen, xUnit bietet mehrere Optionen zur Übergabe komplexer Parameter an theoriebasierte Unit-Tests. Eine solche Option ist das MemberData-Attribut.
Mit dem MemberData-Attribut können Sie eine Eigenschaft oder Methode angeben, die IEnumerable
[Theory, MemberData(nameof(MyCustomData))] public void WriteReportsToMemoryStream(...) { // ... } public static IEnumerable<object[]> MyCustomData() { // ... }
Vor xUnit 2.0 gab es eine andere Alternative: ClassData. Ähnlich wie MemberData ermöglichte ClassData die gemeinsame Nutzung von Datengeneratoren zwischen Tests in verschiedenen Klassen und Namespaces. Zum Beispiel:
public class MyCustomTests { [Theory, ClassData(typeof(MyCustomData))] public void WriteReportsToMemoryStream(...) { // ... } } public class MyCustomData : IEnumerable<object[]> { // ... }
xUnit 2.0 führte eine überladene Version von MemberData ein, die die direkte Verwendung statischer Member aus anderen Klassen ermöglicht. Das obige ClassData-Beispiel kann mit dieser Überladung umgeschrieben werden:
[Theory, MemberData(nameof(MyCustomData.GetData), MemberType = typeof(MyCustomData))] public void WriteReportsToMemoryStream(...) { // ... }
Diese Beispiele veranschaulichen die verschiedenen Möglichkeiten, komplexe Parameter an theoriegesteuerte Komponententests in xUnit mithilfe von MemberData, ClassData, zu übergeben. und ihre jeweiligen Überlastungen. Durch die Nutzung dieser Attribute können Entwickler bequem Daten für Testmethoden generieren, die mit komplexen Datenstrukturen arbeiten.
Das obige ist der detaillierte Inhalt vonWie übergebe ich komplexe Parameter an theoriebasierte Unit-Tests in xUnit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!