Heim >Backend-Entwicklung >C++ >Wie übergebe ich komplexe Parameter an theoriebasierte Unit-Tests in xUnit?

Wie übergebe ich komplexe Parameter an theoriebasierte Unit-Tests in xUnit?

Barbara Streisand
Barbara StreisandOriginal
2025-01-02 21:24:41988Durchsuche

How to Pass Complex Parameters to Theory-Driven Unit Tests in xUnit?

Übergabe komplexer Parameter an theoriegesteuerte Unit-Tests

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.

Die Theorie komplexer Parameter

Um diese Herausforderung anzugehen, xUnit bietet mehrere Optionen zur Übergabe komplexer Parameter an theoriebasierte Unit-Tests. Eine solche Option ist das MemberData-Attribut.

MemberData to the Rescue

Mit dem MemberData-Attribut können Sie eine Eigenschaft oder Methode angeben, die IEnumerable zurückgibt. Jedes Objektarray in dieser Sequenz repräsentiert die Parameter für jede Testinstanz. Zum Beispiel:

[Theory, MemberData(nameof(MyCustomData))]
public void WriteReportsToMemoryStream(...)
{
    // ...
}

public static IEnumerable<object[]> MyCustomData()
{
    // ...
}

ClassData: Ein alternativer Ansatz

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[]>
{
    // ...
}

MemberData mit statischer Member-Überladung (xUnit >= 2.0)

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(...)
{
    // ...
}

Schlussfolgerung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn