Heim > Backend-Entwicklung > C++ > Wie kann ich komplexe Parameter an die [Theorie]-Tests von Xunit übergeben?

Wie kann ich komplexe Parameter an die [Theorie]-Tests von Xunit übergeben?

Susan Sarandon
Freigeben: 2024-12-30 05:59:09
Original
534 Leute haben es durchsucht

How Can I Pass Complex Parameters to Xunit's [Theory] Tests?

Komplexe Parameter an [Theory] übergeben

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.

MemberData-Attribut

XUnit bietet das MemberData-Attribut an, mit dem Sie ein IEnumerable Eigentum. Jedes Objekt[] wird in die Parameter Ihrer [Theorie]-Methode entpackt.

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 }
        };
}
Nach dem Login kopieren

ClassData-Attribut

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
}
Nach dem Login kopieren

MemberData-Überladung für statische Mitglieder

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);
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage