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
Susan SarandonOriginal
2024-12-30 05:59:09549Durchsuche

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 }
        };
}

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
}

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);
    }
}

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!

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