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
Libérer: 2025-01-04 10:28:35
original
639 Les gens l'ont consulté

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 }
        };
}
Copier après la connexion

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 }
        };
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal