Partager via


Vue d'ensemble de l'extensibilité des générateurs de données

Vous pouvez utiliser Visual Studio Premium ou Visual Studio Ultimate pour générer les données significatives pour le test. Les générateurs de données intégrés vous permettent de générer des données aléatoires, de générer des données à partir de sources de données existantes et de contrôler de nombreux aspects de la génération de données. Si les fonctionnalités des générateurs intégrés sont insuffisantes, vous pouvez créer des générateurs de données personnalisés. Pour ce faire, vous utilisez les classes de l'espace de noms Microsoft.Data.Schema.Tools.DataGenerator.

API d'extensibilité des générateurs de données

L'API d'extensibilité fournit des classes dont les développeurs peuvent hériter. Outre des classes, l'API inclut des attributs que vous pouvez appliquer à vos classes dérivées. En appliquant ces attributs, vous réduisez la quantité de code qui est requise dans les générateurs personnalisés pour les cas courants.

Vous pouvez utiliser l'API d'extensibilité des trois manières suivantes pour créer des générateurs de données personnalisés :

Extensibilité

Description

Difficulté

Exemple

Extensibilité déclarative

Simple

Générateur de données Integer intégré

Extensibilité normale

Moyenne. Cette méthode est généralement recommandée.

Procédure pas à pas : création d'un générateur de données personnalisé

Procédure pas à pas : création d'un générateur de données personnalisé pour une contrainte de validation

Extensibilité de base

  • Définissez une classe qui implémente l'interface IGenerator.

  • Implémenter toutes les méthodes qui sont requises par votre générateur.

  • Créez un concepteur personnalisé pour le générateur qui implémente l'IDesigner.

  • Implémenter toutes les méthodes qui sont requises par votre générateur.

Difficile

Aucun

Extensibilité de base

L'API d'extensibilité de base est le mécanisme par lequel le moteur de génération de données et les concepteurs de plans de génération de données interagissent. Cette API a été conçue pour satisfaire les objectifs suivants :

  • Robustesse : encourager une implémentation cohérente et fiable à la fois dans les moteurs au moment du design et dans les moteurs d'exécution.

  • Souplesse : prendre en charge des générateurs complexes tels que le générateur lié aux données.

Le fait que l'API d'extensibilité de base soit plus complexe que l'API d'extensibilité déclarative de niveau supérieur constitue un compromis de conception qui est implicite dans l'API d'extensibilité de base.

Enregistrement de générateurs de données personnalisés

Avant de pouvoir utiliser votre générateur de données personnalisé, vous devez l'enregistrer sur votre ordinateur. Si vous donnez votre générateur de données personnalisé à d'autres personnes pour qu'elles l'utilisent, ces personnes doivent l'enregistrer sur leur ordinateur.

Il est possible d'enregistrer des générateurs de données personnalisés de plusieurs façons :

Méthode

Autorisations requises

Exemple

Enregistrez le générateur dans le dossier Extensions.

Utilisateur avec pouvoir ou autorisation supérieure

Créer un projet de déploiement pour enregistrer le générateur.

Administrateur

  • Aucun

Générateurs de données, distributions et concepteurs

Vous pouvez créer des générateurs de données personnalisés et des concepteurs personnalisés pour ces générateurs. Vous pouvez également créer des distributions pour des générateurs de données numériques et des concepteurs personnalisés pour ces distributions.

  • Les générateurs de données personnalisés produisent les données de test aléatoires d'après un jeu de règles que vous spécifiez. Vous pouvez utiliser le concepteur par défaut avec ces générateurs ou créer un concepteur personnalisé pour eux en héritant de DefaultGeneratorDesigner. Par exemple, le générateur de données d'expressions régulières est un générateur de données intégré qui utilise un concepteur personnalisé afin de pouvoir procéder à une validation personnalisée des entrées d'utilisateur au moment du design.

  • En utilisant un concepteur de générateur personnalisé, vous pouvez personnaliser comment les propriétés d'entrée et de sortie sont récupérées des paramètres utilisateur, définir les valeurs par défaut et spécifier le comportement de validation.

  • En utilisant une distribution personnalisée, vous pouvez contrôler la distribution des valeurs numériques qu'un générateur de données génère.

  • Les concepteurs de distributions personnalisés contrôlent le comportement au moment du design pour une distribution personnalisée. Ce comportement inclut l'obtention des noms des propriétés d'entrée pour la distribution, la définition des valeurs par défaut des propriétés d'entrée, et la validation des valeurs des propriétés d'entrée pour la distribution.

Générateurs de données et localisation

Les générateurs de données inclus avec Visual Studio Premium et Visual Studio Ultimate sont localisés parce que Visual Studio expédie plusieurs versions linguistiques. Vous n'avez probablement pas à localiser vos générateurs de données personnalisés. Si vous devez créer un générateur de données qui sera localisé, vous devez créer un concepteur personnalisé. Vous pouvez également substituer la méthode GetInputs pour localiser les noms des propriétés d'entrée.

Notes

Si possible, vous devez hériter de la classe DefaultGeneratorDesigner, ne pas implémenter l'interface IDesigner, pour éviter le travail supplémentaire.

Instanciation de générateurs de données

Les générateurs de données personnalisés peuvent partager des données. La portée des données partagées est le type de générateur et la table de base de données. Chaque type de générateur a un dictionnaire d'instance unique pour chaque table de base de données. Par exemple, un générateur de données personnalisé pour une table nommée Customers a accès à un dictionnaire partagé. Vous pouvez placer n'importe quelles informations dans le dictionnaire et les partager. L'instance du dictionnaire est obligatoirement la même pour chaque type de générateur et chaque table. Par exemple, vous pouvez créer un générateur de données personnalisé et demander le dictionnaire de GeneratorInit. Vous pouvez ensuite vérifier si le dictionnaire contient des informations partagées. Si tel est le cas, vous pouvez utiliser ces informations pour générer des données. Vous pouvez également créer les informations partagées que d'autres instances de votre générateur peuvent utiliser.

Notes

L'instanciation de générateurs est une technique avancée. Vous pouvez utiliser l'instanciation pour créer un générateur de données personnalisé qui gère des contraintes de validation dans toutes les colonnes ; il peut s'agir, par exemple, d'une contrainte de validation qui requiert qu'une colonne est supérieure à une autre colonne.

Processus de génération de données

Les phases de la génération de données sont les suivantes :

Déterminer le type du concepteur

Au moment du design

Cette phase requiert le type du générateur de données comme entrée. Le moteur peut ensuite interroger GeneratorAttribute pour récupérer le type du concepteur. Généralement, GeneratorAttribute est hérité de la classe de base, qui spécifie le concepteur par défaut.

Instancier et initialiser le concepteur

Au moment du design

Le concepteur est instancié. Il est initialisé en appelant Initialize et en passant le type du générateur comme argument.

Récupérer les descripteurs d'entrée

Au moment du design

L'InputDescriptor est récupéré du concepteur. Pour ce faire, le concepteur par défaut récupère toutes les propriétés du générateur de données qui sont marquées avec InputAttribute.

Définir les valeurs par défaut

Au moment du design

Les valeurs par défaut sont définies.

Obtenir les descriptions de la sortie du générateur

Au moment du design

L'OutputDescriptor est récupéré du concepteur. Le concepteur par défaut utilise des propriétés qui sont marquées avec OutputAttribute pour créer les descriptions qui apparaissent dans la colonne Sortie du générateur de la fenêtre Détails de la colonne.

Instancier le générateur

Au moment de l'exécution

Le générateur de données est instancié en utilisant le constructeur par défaut.

Définir les entrées du générateur

Au moment de l'exécution

Toutes les valeurs d'entrée sont définies dans le générateur de données à partir des descripteurs d'entrée qui sont récupérés du concepteur.

Valider le générateur

Au moment de l'exécution

La méthode ValidateInputs est appelée. Si la validation échoue, le générateur lèvera une exception InputValidationException. Toute exception autre qu'une exception de validation des données est traitée comme une erreur irrécupérable.

Initialiser le générateur

Au moment de l'exécution

La méthode Initialize est appelée. Cette étape permet au générateur de données d'exécuter toute la configuration nécessaire avant la génération de données, par exemple la spécification de la chaîne de connexion pour la base de données cible ou la définition d'une valeur de départ pour le générateur de nombres aléatoires. Cette phase a lieu une fois avant la génération de données.

Exécuter la génération de données

Au moment de l'exécution

Pendant cette phase, de nouveaux résultats sont générés en appelant la méthode GenerateNextValues. Des résultats peuvent être récupérés en utilisant la méthode GetOutputValue. Cette méthode récupère une valeur scalaire à partir du générateur qui correspond à la clé de sortie qui est passée au générateur en tant qu'entrée. Cette phase itère au sein de résultats jusqu'à ce que tous les résultats que vous souhaitez aient tous été générés.

Nettoyer

Au moment de l'exécution

Une fois toutes les générations de données terminées, Dispose est appelé pour nettoyer le générateur.

Voir aussi

Tâches

Comment : créer des générateurs de données personnalisés

Procédure pas à pas : création d'un générateur de données personnalisé

Référence

Microsoft.Data.Schema.DataGenerator

Concepts

Générer des données de test spécialisées à l'aide d'un générateur de données personnalisé