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é |
Extensibilité de base |
|
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 |
|
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é