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
Libérer: 2024-12-30 05:59:09
original
532 Les gens l'ont consulté

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

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

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

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!

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