Maison >développement back-end >C++ >Comment puis-je transmettre des paramètres complexes aux tests théoriques xUnit ?

Comment puis-je transmettre des paramètres complexes aux tests théoriques xUnit ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-04 10:28:35617parcourir

How Can I Pass Complex Parameters to xUnit Theory Tests?

Passer des paramètres complexes à [Théorie]

Dans Xunit, l'attribut InlineData vous permet de créer des tests individuels pour chaque ensemble de données fourni. Cependant, que se passe-t-il si votre méthode prend un paramètre complexe, tel qu'une liste d'objets personnalisés ?

Pour gérer cette situation, XUnit propose l'attribut MemberData. En définissant une propriété qui renvoie IEnumerable, vous pouvez générer un tableau d'objets qui seront décompressés et transmis en tant que paramètres individuels à votre méthode Theory. Voici un exemple :

Exemple MemberData :

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

Dans XUnit version 2.0 ou ultérieure, vous pouvez utiliser l'attribut [MemberData] sur une méthode qui renvoie IEnumerable< objet[]>. L'exemple suivant le démontre :

Exemple de données de membres surchargées :

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

En utilisant ces techniques, vous pouvez transmettre efficacement des paramètres complexes à vos tests théoriques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn