Heim >Backend-Entwicklung >C++ >Wie kann ich komplexe Parameter an xUnit-Theorietests übergeben?

Wie kann ich komplexe Parameter an xUnit-Theorietests übergeben?

Susan Sarandon
Susan SarandonOriginal
2025-01-04 10:28:35620Durchsuche

How Can I Pass Complex Parameters to xUnit Theory Tests?

Übergabe komplexer Parameter an [Theorie]

In Xunit können Sie mit dem InlineData-Attribut individuelle Tests für jeden bereitgestellten Datensatz erstellen. Was aber, wenn Ihre Methode einen komplexen Parameter akzeptiert, beispielsweise eine Liste benutzerdefinierter Objekte?

Um diese Situation zu bewältigen, bietet XUnit das MemberData-Attribut. Durch Definieren einer Eigenschaft, die IEnumerable zurückgibt, können Sie ein Array von Objekten generieren, die entpackt und als einzelne Parameter an Ihre Theory-Methode übergeben werden. Hier ist ein Beispiel:

MemberData-Beispiel:

public class StringTests2
{
    [Theory, MemberData(nameof(SplitCountData))]
    public void SplitCount(string input, int expectedCount)
    {
        var actualCount = input.Split(' ').Count();
        Assert.Equal(expectedCount, actualCount);
    }

    public static IEnumerable<object[]> SplitCountData =>
        new List<object[]>
        {
            new object[] { "xUnit", 1 },
            new object[] { "is fun", 2 },
            new object[] { "to test with", 3 }
        };
}

In XUnit Version 2.0 oder höher können Sie das [MemberData]-Attribut für eine Methode verwenden, die IEnumerable< zurückgibt. Objekt[]>. Das folgende Beispiel zeigt dies:

Beispiel für überladene Mitgliedsdaten:

public class StringTests3
{
    [Theory, MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))]
    public void IndexOf(string input, char letter, int expected)
    {
        var actual = input.IndexOf(letter);
        Assert.Equal(expected, actual);
    }
}

public class IndexOfData  
{
    public static IEnumerable<object[]> SplitCountData => 
        new List<object[]>
        {
            new object[] { "hello world", 'w', 6 },
            new object[] { "goodnight moon", 'w', -1 }
        };
}

Durch die Verwendung dieser Techniken können Sie komplexe Parameter effektiv an Ihre Theorietests übergeben.

Das obige ist der detaillierte Inhalt vonWie kann ich komplexe Parameter an xUnit-Theorietests ü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