Partager via


Generator, classe

Mise à jour : novembre 2007

Classe de base abstraite des générateurs de données.

Espace de noms :  Microsoft.VisualStudio.TeamSystem.Data.DataGenerator
Assembly :  Microsoft.VisualStudio.TeamSystem.Data (dans Microsoft.VisualStudio.TeamSystem.Data.dll)

Syntaxe

<GeneratorAttribute(GetType(DefaultGeneratorDesigner))> _
<CLSCompliantAttribute(True)> _
Public MustInherit Class Generator _
    Implements IGenerator, IDisposable

Dim instance As Generator
[GeneratorAttribute(typeof(DefaultGeneratorDesigner))]
[CLSCompliantAttribute(true)]
public abstract class Generator : IGenerator, 
    IDisposable
[GeneratorAttribute(typeof(DefaultGeneratorDesigner))]
[CLSCompliantAttribute(true)]
public ref class Generator abstract : IGenerator, 
    IDisposable
public abstract class Generator implements IGenerator, IDisposable

Notes

Si les générateurs de données standard sont insuffisants, vous pouvez créer des générateurs de données personnalisés. Pour créer un générateur de données personnalisé, vous devez créer une classe qui implémente IGenerator ou hérite de Generator. Vous identifiez la classe comme générateur de données en la décorant avec l'GeneratorAttribute.

Vous pouvez créer un concepteur personnalisé pour un générateur de données personnalisé, ou vous pouvez utiliser DefaultGeneratorDesigner.

L'implémentation de la classe de base construit des sorties en fonction des propriétés publiques qui sont marquées avec OutputAttribute. Les entrées sont définies en utilisant l'InputAttribute. L'utilisation de propriétés qui sont marquées avec des attributs fournit un mécanisme simple pour déclarer des valeurs d'entrée et de sortie fortement typées.

Exemples

Les générateurs de données standard ne peuvent pas générer de données qui répondent à certaines contraintes de validation. Par exemple, si une contrainte de validation nécessite qu'une date figure dans l'une de deux plages distinctes, vous ne pouvez pas utiliser le générateur DateTime standard. Cet exemple crée un générateur de données personnalisé qui peut satisfaire à une telle contrainte. Le générateur accepte deux plages distinctes comme entrée, puis génère une date aléatoire qui figure dans l'une des deux plages. Pour plus d'informations, consultez Procédure pas à pas : création d'un générateur de données personnalisé pour une contrainte de validation.

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.VisualStudio.TeamSystem.Data.DataGenerator;

namespace GeneratorDateRangesCS
{
    public class GeneratorDateRangesCS : Generator
    {
        DateTime mRange1Min;
        DateTime mRange1Max;

        DateTime mRange2Min;
        DateTime mRange2Max;

        [Input]
        public DateTime Range1Min
        {
            set {mRange1Min = value;}
        }

        [Input]
        public DateTime Range1Max
        {
            set {mRange1Max = value;}
        }

        [Input]
        public DateTime Range2Min
        {
            set {mRange2Min = value;}
        }

        [Input]
        public DateTime Range2Max
        {
            set {mRange2Max = value;}
        }


        DateTime mRandomDate;

        [Output]
        public DateTime RandomDate
        {
            get {return mRandomDate;}
        }


        Random mRandom;
        Random mRandomRange;

        protected override void OnInitialize(GeneratorInit initInfo)
        {
            mRandom = new Random(this.Seed);       //deterministic
            mRandomRange = new Random(this.Seed);  //deterministic

            //mRandom = new Random();                //non-deterministic
            //mRandomRange = new Random();           //non-deterministic

            base.OnInitialize(initInfo);
        }


        protected override void OnGenerateNextValues()
        {
            DateTime min;
            DateTime max;

            //Generate a random date from either range 1 or range 2.
            //Randomly select either range 1 or range 2 by randomly 
            //generating an odd or an even random number.
            //------------------------------------------------------------
            if (mRandomRange.Next() % 2 == 0)  //check for odd or even
            {
                min = mRange1Min;
                max = mRange1Max;
            }
            else
            {
                min = mRange2Min;
                max = mRange2Max;
            }

            //The formula for creating a random number in a specific range is:
            //start of range + (size of range * random number between 0 and 1)

            //size of range
            TimeSpan range = max - min;

            //(size of range * random number between 0 and 1)
            TimeSpan randomNumber = new TimeSpan((long)(range.Ticks * mRandom.NextDouble()));

            //start of range + (size of range * random number between 0 and 1)
            mRandomDate = min + randomNumber;
        }
    }//end class
}//end namespace
Imports Microsoft.VisualStudio.TeamSystem.Data.DataGenerator

Public Class GeneratorDateRangesVB
    Inherits Generator

    Dim mRange1Min As Date
    Dim mRange1Max As Date

    Dim mRange2Min As Date
    Dim mRange2Max As Date

    <Input()> _
    Public WriteOnly Property Range1Min() As Date
        Set(ByVal value As Date)
            mRange1Min = value
        End Set
    End Property

    <Input()> _
    Public WriteOnly Property Range1Max() As Date
        Set(ByVal value As Date)
            mRange1Max = value
        End Set
    End Property

    <Input()> _
    Public WriteOnly Property Range2Min() As Date
        Set(ByVal value As Date)
            mRange2Min = value
        End Set
    End Property

    <Input()> _
    Public WriteOnly Property Range2Max() As Date
        Set(ByVal value As Date)
            mRange2Max = value
        End Set
    End Property


    Dim mRandomDate As Date

    <Output()> _
    Public ReadOnly Property RandomDate() As Date
        Get
            Return mRandomDate
        End Get
    End Property


    Dim mRandom As Random
    Dim mRandomRange As Random

    Protected Overrides Sub OnInitialize(ByVal initInfo As GeneratorInit)

        mRandom = New Random(Me.Seed)       'deterministic
        mRandomRange = New Random(Me.Seed)  'deterministic

        'mRandom = New Random()              'non-deterministic
        'mRandomRange = New Random()         'non-deterministic

        MyBase.OnInitialize(initInfo)
    End Sub


    Protected Overrides Sub OnGenerateNextValues()

        Dim min As Date
        Dim max As Date

        'Generate a random date from either range 1 or range 2.
        'Randomly select either range 1 or range 2 by randomly 
        'generating an odd or an even random number.
        '------------------------------------------------------------
        If mRandomRange.Next() Mod 2 = 0 Then  'check for odd or even
            min = mRange1Min
            max = mRange1Max
        Else
            min = mRange2Min
            max = mRange2Max
        End If

        'The formula for creating a random number in a specific range is:
        'start of range + (size of range * random number between 0 and 1)

        'size of range
        Dim range As TimeSpan = max - min

        '(size of range * random number between 0 and 1)
        Dim randomNumber As TimeSpan = New TimeSpan(CLng(range.Ticks * mRandom.NextDouble()))

        'start of range + (size of range * random number between 0 and 1)
        mRandomDate = min + randomNumber

    End Sub
End Class

Hiérarchie d'héritage

System.Object
  Microsoft.VisualStudio.TeamSystem.Data.DataGenerator.Generator
    Microsoft.VisualStudio.TeamSystem.Data.Generators.Bit
    Microsoft.VisualStudio.TeamSystem.Data.Generators.DatabaseDateTime
    Microsoft.VisualStudio.TeamSystem.Data.Generators.DatabaseGuid
    Microsoft.VisualStudio.TeamSystem.Data.Generators.DataBoundGenerator
    Microsoft.VisualStudio.TeamSystem.Data.Generators.Image
    Microsoft.VisualStudio.TeamSystem.Data.Generators.Numeric<T>
    Microsoft.VisualStudio.TeamSystem.Data.Generators.RegexString
    Microsoft.VisualStudio.TeamSystem.Data.Generators.VarBinary

Sécurité des threads

Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Voir aussi

Référence

Membres Generator

Microsoft.VisualStudio.TeamSystem.Data.DataGenerator, espace de noms

GeneratorAttribute

GeneratorInit

IGenerator

Autres ressources

Création de générateurs de données personnalisés

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

Spécification des détails de génération de données pour une colonne