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

Wie kann ich komplexe Parameter an die [Theorie]-Methoden von XUnit übergeben?

DDD
DDDOriginal
2025-01-04 14:50:39299Durchsuche

How Can I Pass Complex Parameters to XUnit's [Theory] Methods?

Übergabe komplexer Parameter an [Theorie]

XUnit stellt das InlineData-Attribut bereit, das es Benutzern ermöglicht, mehrere Tests mit einfachen Datenparametern zu generieren. Beim Umgang mit komplexeren Parametern, beispielsweise einer Liste benutzerdefinierter Klassen, ist jedoch ein anderer Ansatz erforderlich.

MemberData- und ClassData-Attribute

XUnit bietet mehrere Optionen für Übergabe komplexer Parameter an [Theory]-Methoden. Ein Ansatz besteht darin, das MemberData-Attribut zu verwenden. Dieses Attribut weist XUnit an, eine Eigenschaft auszuführen, die ein IEnumerable zurückgibt. Jedes Objekt[] im IEnumerable wird als Parameter für einen einzelnen Aufruf Ihrer [Theory]-Methode „entpackt“.

Eine andere Option ist die Verwendung des ClassData-Attributs. ClassData funktioniert ähnlich wie MemberData, ermöglicht jedoch die gemeinsame Nutzung von Datengeneratoren zwischen Tests in verschiedenen Klassen oder Namespaces. Es trennt auch die „Datengeneratoren“ von den eigentlichen Testmethoden.

ClassData-Beispiel mit statischer Member-Unterstützung

Um ClassData mit statischer Member-Unterstützung zu verwenden, können Sie eine definieren Klasse mit einer statischen Eigenschaft, die IEnumerable zurückgibt, wie unten gezeigt:

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

In Ihrer Testklasse können Sie dies tun Wenden Sie dann das [Theory]-Attribut an und geben Sie das statische Mitglied mithilfe der MemberType-Eigenschaft des Attributs an:

[Theory, MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))]
public void IndexOf(string input, char letter, int expected) {...}

Durch die Nutzung dieser Attribute können Sie komplexe Parameter an Ihre [Theory]-Methoden übergeben und so Tests durchführen verschiedene Szenarien effizient.

Das obige ist der detaillierte Inhalt vonWie kann ich komplexe Parameter an die [Theorie]-Methoden 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