Maison >développement back-end >C++ >Comment puis-je transmettre des paramètres complexes aux tests [théorie] de Xunit ?

Comment puis-je transmettre des paramètres complexes aux tests [théorie] de Xunit ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-30 05:59:09536parcourir

How Can I Pass Complex Parameters to Xunit's [Theory] Tests?

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

Passer des types de données simples tels que des chaînes, des entiers et des doubles comme paramètres aux tests [Théorie] dans Xunit est simple à l'aide d'attributs comme InlineData. Cependant, pour des paramètres plus complexes, la question se pose de savoir comment fournir de telles données.

Attribut MemberData

XUnit propose l'attribut MemberData, qui permet de renvoyer un objet IEnumerable propriété. Chaque objet[] sera décompressé dans les paramètres de votre méthode [Théorie].

Par exemple :

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

Attribut ClassData

Avant Xunit 2.0, vous pouviez utilisez l'attribut ClassData pour partager des générateurs de données entre des tests de différentes classes.

Pour exemple :

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
}

Surcharge de MemberData pour les membres statiques

Dans Xunit 2.0 et versions ultérieures, MemberData peut prendre un paramètre MemberType pour spécifier un membre statique d'une autre classe.

Pour exemple :

public class StringTests
{
    [Theory]
    [MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))]
    public void SplitCount(string input, int expectedCount)
    {
        Assert.Equal(expectedCount, input.Split(' ').Length);
    }
}

Alternativement, vous pouvez toujours utiliser ClassData si vous préférez la séparation entre les générateurs de données et le test méthodes.

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