Heim >Backend-Entwicklung >C++ >Wie kann ich komplexe Parameter, wie Listen benutzerdefinierter Klassen, an XUnit Theories übergeben?

Wie kann ich komplexe Parameter, wie Listen benutzerdefinierter Klassen, an XUnit Theories übergeben?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-02 14:10:38350Durchsuche

How Can I Pass Complex Parameters, Like Lists of Custom Classes, to XUnit Theories?

Übergabe komplexer Parameter an Theorien

Problem:

XUnit ermöglicht die Erstellung parametrisierter Tests mithilfe von InlineData-Attributen. Beim Umgang mit komplexen Parametern wie Listen benutzerdefinierter Klassen treten jedoch Herausforderungen auf.

Antwort:

XUnit stellt verschiedene Datenattribute bereit, einschließlich MemberData. Durch die Implementierung einer Eigenschaft, die IEnumerable zurückgibt, kann jedes Element in der Sammlung als Parameter für einen einzelnen Theoriemethodenaufruf entpackt werden.

MemberData-Beispiel:

public class MyClass { public string Name { get; set; } }

public static void WriteReportsToMemoryStream(
    IEnumerable<MyClass> listReport,
    MemoryStream ms,
    StreamWriter writer) { ... }

[Theory, MemberData(nameof(Data))]
public void WriteReports(IEnumerable<MyClass> listReport)
{
    using (var ms = new MemoryStream())
    {
        using (var writer = new StreamWriter(ms))
        {
            WriteReportsToMemoryStream(listReport, ms, writer);
            // ...
        }
    }
}

public static IEnumerable<object[]> Data => new[]
{
    new object[] { new[] { new MyClass { Name = "Item1" } } },
    new object[] { new[] { new MyClass { Name = "Item2" } } },
};

Die Data-Eigenschaft generiert eine Aufzählung von Objektarrays, wobei jedes Array einem Parametersatz für die WriteReports entspricht Methode.

Das obige ist der detaillierte Inhalt vonWie kann ich komplexe Parameter, wie Listen benutzerdefinierter Klassen, an XUnit Theories übergeben?. 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