Maison >développement back-end >C++ >Comment transmettre des paramètres complexes aux tests unitaires basés sur la théorie dans xUnit ?

Comment transmettre des paramètres complexes aux tests unitaires basés sur la théorie dans xUnit ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-02 21:24:411017parcourir

How to Pass Complex Parameters to Theory-Driven Unit Tests in xUnit?

Transmission de paramètres complexes à des tests unitaires basés sur la théorie

Les frameworks de tests unitaires comme xUnit offrent des fonctionnalités pratiques pour les tests basés sur les données. Cependant, lorsque les paramètres de la méthode testée sont des structures de données complexes, telles que des listes de classes personnalisées, l'attribut InlineData est insuffisant.

La théorie des paramètres complexes

Pour relever ce défi, xUnit propose plusieurs options pour transmettre des paramètres complexes à des tests unitaires fondés sur la théorie. L'une de ces options est l'attribut MemberData.

MemberData to the Rescue

L'attribut MemberData vous permet de spécifier une propriété ou une méthode qui renvoie IEnumerable. Chaque tableau d'objets de cette séquence représente les paramètres de chaque instance de test. Par exemple :

[Theory, MemberData(nameof(MyCustomData))]
public void WriteReportsToMemoryStream(...)
{
    // ...
}

public static IEnumerable<object[]> MyCustomData()
{
    // ...
}

ClassData : une approche alternative

Avant xUnit 2.0, une autre alternative existait : ClassData. Semblable à MemberData, ClassData permettait de partager des générateurs de données entre des tests dans différentes classes et espaces de noms. Par exemple :

public class MyCustomTests
{
    [Theory, ClassData(typeof(MyCustomData))]
    public void WriteReportsToMemoryStream(...)
    {
        // ...
    }
}

public class MyCustomData : IEnumerable<object[]>
{
    // ...
}

MemberData avec surcharge de membres statiques (xUnit >= 2.0)

xUnit 2.0 a introduit une version surchargée de MemberData qui permet l'utilisation directe de membres statiques d'autres classes. L'exemple ClassData ci-dessus peut être réécrit en utilisant cette surcharge :

[Theory, MemberData(nameof(MyCustomData.GetData), MemberType = typeof(MyCustomData))]
public void WriteReportsToMemoryStream(...)
{
    // ...
}

Conclusion

Ces exemples illustrent les différentes manières de transmettre des paramètres complexes à des tests unitaires basés sur la théorie dans xUnit à l'aide de MemberData, ClassData, et leurs surcharges respectives. En tirant parti de ces attributs, les développeurs peuvent facilement générer des données pour tester des méthodes qui fonctionnent sur des structures de données complexes.

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