Partilhar via


Demonstra Passo a passo: Criando um gerador de dados personalizado que agrega geradores padrão

In Visual Studio Team System Database Edition, você pode criar instâncias das classes do gerador de dados padrão nas suas classes de gerador de dados personalizados. Usando essa abordagem, você pode convenientemente reduzir a quantidade de lógica que você tenha que incluir em seus geradores de dados personalizados.Por exemplo, convém criar um gerador gera dados de seqüência de caracteres aleatória que corresponde a mais de um padrão complexo.Você pode criar um gerador de dados personalizado que contém a lógica para manipular vários padrões e você pode usar o gerador de RegularExpression padrão para lidar com a correspondência de padrões complexos.

Nesta explicação passo a passo, você criar um gerador de dados personalizado que agrega o gerador de DateTime padrão.Criar um gerador que gera dados está em um dos dois intervalos de data diferentes.O gerador aceita dois intervalos distintos sistema autônomo entrada e gera uma data aleatória em um dos dois intervalos.

Observação:

Para obter mais informações sobre o objetivo desse gerador de dados personalizados e aprender a realizar a mesma meta usando extensibilidade normal, consulte Demonstra Passo a passo: Criando um gerador de dados personalizada para um teste de verificação.

Nesta explicação passo a passo, você executa as seguintes tarefas:

  • Criar uma classe que herda de Generator.

  • criar Propriedades de entrada para que o usuário pode especificar a data de dois intervalos.

  • criar uma propriedade de saída para usar sistema autônomo a gerador de saída.

  • criar duas instâncias do gerador de DateTime padrão para representar cada um dos dois intervalos de possíveis.

  • Substituir Generator métodos e dentro deles, delegado o trabalho para os geradores de padrão.

  • Assine o gerador de com um nome forte.

Pré-requisitos

Para concluir essa explicação passo a passo, você precisa do seguinte:

  • Database Edition

Criando a classe de gerador de dados personalizado

Para criar a classe do gerador de dados personalizados

  1. In Visual Studio, crie um projeto classe biblioteca no linguagem de sua escolha e denomine GeneratorDateRanges2.

  2. No menu Project, escolha Add Reference.

    The Adicionar referência caixa de diálogo é exibida.

  3. clicar no NET guia.No Nome do componente lista, clicar Microsoft.VisualStudio.TeamSystem.dados e, em seguida, clicar OK.

  4. No menu Project, escolha Add Reference.

    The Adicionar referência caixa de diálogo é exibida.

  5. clicar no Procurar guia e procure o local...\Arquivos de programas\Microsoft visual Studio 9.0\DBPro\Extensions.

  6. clicar Microsoft.VisualStudio.TeamSystem.dados.Generators.dll e, em seguida, clicar OK.

  7. (Opcional, Visual Basic In somente) O gerenciador de soluções, clicar Mostrar todos os arquivose expandir o Referências nó para verificar as novas referências.

  8. Na parte superior do Código janela, antes da declaração de classe, adicione a seguinte linha de código:

    Imports Microsoft.VisualStudio.TeamSystem.Data.DataGenerator
    Imports Microsoft.VisualStudio.TeamSystem.Data.Generators
    Imports System.Data.SqlTypes
    
    using Microsoft.VisualStudio.TeamSystem.Data.DataGenerator;
    using Microsoft.VisualStudio.TeamSystem.Data.Generators;
    using System.Data.SqlTypes;
    
  9. Renomear clsistema autônomos de Class1 para GeneratorDateRanges2e especificar que seu clsistema autônomos herda Generator, sistema autônomo mostrado no exemplo a seguir.

    Cuidado:

    Por padrão, o nome que você forneça sua classe é o nome que aparece na lista o Gerador coluna a Detalhes da coluna janela.Você deve especificar um nome que não está em conflito com o nome de um gerador de padrão ou de outro gerador personalizado.

    Public Class GeneratorDateRanges2
        Inherits Generator
    
    End Class
    
    public class GeneratorDateRanges2: Generator
    {
    }
    
  10. No menu File, clique em Save All.

Adicionando propriedades de entrada

Esse gerador de dados personalizados aceita dois intervalos de datas sistema autônomo entrada.Para especificar cada intervalo, o usuário Especifica o mínimo e a data máxima para cada um.Portanto, você deve criar quatro propriedades de entrada no total: duas datas mínimas e duas datas máxima.

Para adicionar as propriedades de entrada

  1. Criar quatro variáveis de membro para armazenar o mínimo e máximo datas para a data de dois intervalos, conforme mostrado no exemplo a seguir.

    Dim range1MinValue As SqlDateTime
    Dim range1MaxValue As SqlDateTime
    
    Dim range2MinValue As SqlDateTime
    Dim range2MaxValue As SqlDateTime
    
    SqlDateTime range1MinValue;
    SqlDateTime range1MaxValue;
    
    SqlDateTime range2MinValue;
    SqlDateTime range2MaxValue;
    
  2. Criar quatro propriedades para conjunto o mínimo e máximo datas para a data de dois intervalos, sistema autônomo mostrado no exemplo a seguir.sistema autônomo propriedades devem ter o InputAttribute para identificá-las sistema autônomo propriedades de entrada.

    <Input(Visible:= true, TypeConverter:= GetType(SqlDateTimeConverter))> _
    Public Property Range1Min() As SqlDateTime
        Set(ByVal value As SqlDateTime)
            range1MinValue = value
        End Set
        Get
            Return range1MinValue
        End Get
    End Property
    
    <Input(Visible:= true, TypeConverter:= GetType(SqlDateTimeConverter))> _
    Public Property Range1Max() As SqlDateTime
        Set(ByVal value As SqlDateTime)
            range1MaxValue = value
        End Set
        Get
            Return range1MaxValue
        End Get
    End Property
    
    <Input(Visible:= true, TypeConverter:= GetType(SqlDateTimeConverter))> _
    Public Property Range2Min() As SqlDateTime
        Set(ByVal value As SqlDateTime)
            range2MinValue = value
        End Set
        Get
            Return range2MinValue
        End Get
    End Property
    
    <Input(Visible:= true, TypeConverter:= GetType(SqlDateTimeConverter))> _
    Public Property Range2Max() As SqlDateTime
        Set(ByVal value As SqlDateTime)
            range2MaxValue = value
        End Set
        Get
            Return range2MaxValue
        End Get
    End Property
    
    [Input(Visible = true, TypeConverter = typeof(SqlDateTimeConverter))]
    public SqlDateTime Range1Min
    {
        set {range1MinValue = value;}
        get {return range1MinValue;}
    }
    
    [Input(Visible = true, TypeConverter = typeof(SqlDateTimeConverter))]
    public SqlDateTime Range1Max
    {
        set {range1MaxValue = value;}
        get {return range1MaxValue;}
    }
    
    [Input(Visible = true, TypeConverter = typeof(SqlDateTimeConverter))]
    public SqlDateTime Range2Min
    {
        set {range2MinValue = value;}
        get {return range2MinValue;}
    }
    
    [Input(Visible = true, TypeConverter = typeof(SqlDateTimeConverter))]
    public SqlDateTime Range2Max
    {
        set {range2MaxValue = value;}
        get {return range2MaxValue;}
    }
    
  3. No menu File, clique em Save All.

Adicionando a propriedade de saída

Esse gerador de dados personalizados retorna uma data aleatória sistema autônomo a saída.Portanto, você deve criar uma propriedade de saída.

Para adicionar a propriedade de saída

  1. Criar uma variável de membro para armazenar data aleatória que é a saída sistema autônomo mostrado no exemplo a seguir.

    Dim randomDateValue As SqlDateTime
    
    SqlDateTime randomDateValue;
    
  2. criar uma propriedade para retornar a data aleatória sistema autônomo saída, conforme mostrado no exemplo a seguir.A propriedade deve ter o OutputAttribute para identificá-lo sistema autônomo uma propriedade de saída.

    <Output()> _
    Public ReadOnly Property RandomDate() As SqlDateTime
        Get
            Return randomDateValue
        End Get
    End Property
    
    [Output]
    public SqlDateTime RandomDate
    {
        get {return randomDateValue;}
    }
    
  3. No menu File, clique em Save All.

Substituindo o método OnInitialize

Para substituir o método OnInitialize

  1. Criar uma variável de membro para gerar números aleatórios, sistema autônomo mostrado no exemplo a seguir.Essa variável escolhe aleatoriamente entre dois intervalos de data possível.

    Dim randomRange As Random
    
    Random randomRange;
    
  2. Criar e instanciar duas variáveis de membro padrão geradores de DateTime, sistema autônomo mostrado no exemplo a seguir.

    Dim range1 As DatabaseDateTime = New DatabaseDateTime()
    Dim range2 As DatabaseDateTime = New DatabaseDateTime()
    
    DatabaseDateTime range1 = new DatabaseDateTime();
    DatabaseDateTime range2 = new DatabaseDateTime();
    
  3. Substituir o OnInitialize método, sistema autônomo mostrado no exemplo a seguir. Nesse método, você propagar o Random objeto e fazer seu gerador de determinista. Você também telefonar o Initialize método os geradores de padrão.

    Protected Overrides Sub OnInitialize(ByVal initInfo As GeneratorInit)
    
        randomRange = New Random(Me.Seed)  'deterministic
    
        range1.Initialize(initInfo)
        range2.Initialize(initInfo)
    
        MyBase.OnInitialize(initInfo)
    End Sub
    
    protected override void OnInitialize(GeneratorInit initInfo)
    {
        randomRange = new Random(this.Seed);  //deterministic
    
        range1.Initialize(initInfo);
        range2.Initialize(initInfo);
    
        base.OnInitialize(initInfo);
    }
    
  4. No menu File, clique em Save All.

Substituindo outros métodos

Para substituir os outros métodos

  1. Substituir OnSetInputValues, conforme mostrado no exemplo a seguir. The inputs parâmetro desse método é um IDictionary de todas sistema autônomo gerador padrão propriedades que o usuário conjunto, sistema autônomo semente e porcentagem nulo. Chamar o SetInputValues métodos dos geradores de padrão para passar esses valores a eles. Você então conjunto as propriedades min e max do gerador de cada padrão com as propriedades personalizadas de entrada que você criou nesse gerador de dados.

    Protected Overrides Sub OnSetInputValues(ByVal inputs As IDictionary(Of String, Object))
    
        'It is important to call MyBase.OnSetInputValues first to get the inputs
        'from the Properties window first.
        '--------------------------------------------------------------------------
        MyBase.OnSetInputValues(inputs)
    
        range1.SetInputValues(inputs)
        range2.SetInputValues(inputs)
    
        range1.Min = range1MinValue
        range1.Max = range1MaxValue
        range2.Min = range2MinValue
        range2.Max = range2MaxValue
    
        range1.Distribution = New Uniform()
        range2.Distribution = New Uniform()
    End Sub
    
    protected override void OnSetInputValues(IDictionary<string, object> inputs)
    {
        //It is important to call base.OnSetInputValues first to get the inputs
        //from the Properties window first.
        //-------------------------------------------------------------------------
        base.OnSetInputValues(inputs);
    
        range1.SetInputValues(inputs);
        range2.SetInputValues(inputs);
    
        range1.Min = range1MinValue;
        range1.Max = range1MaxValue;
        range2.Min = range2MinValue;
        range2.Max = range2MaxValue;
    
        range1.Distribution = new Uniform();
        range2.Distribution = new Uniform();
    }
    
  2. Substituir OnValidateInputs para validar entradas, sistema autônomo mostrado no exemplo a seguir.

    Protected Overrides Sub OnValidateInputs()
    
        range1.ValidateInputs()
        range2.ValidateInputs()
    
        MyBase.OnValidateInputs()
    End Sub
    
    protected override void OnValidateInputs()
    {
        range1.ValidateInputs();
        range2.ValidateInputs();
    
        base.OnValidateInputs();
    }
    
  3. Substituir o Dispose(Boolean) método para limpar sistema autônomo geradores de padrão, conforme mostrado no exemplo a seguir.

    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    
        range1.Dispose()
        range2.Dispose()
    
        MyBase.Dispose(disposing)
    End Sub
    
    protected override void Dispose(bool disposing)
    {
        range1.Dispose();
        range2.Dispose();
    
        base.Dispose(disposing);
    }
    
  4. No menu File, clique em Save All.

Substituindo o método OnGenerateNextValues

Database Edition chamadas a OnGenerateNextValues método do gerador de criar os dados que ele precisa. Você deve substituir esse método para fornecer a lógica que gera a data aleatória para a propriedade de saída.Nesta explicação passo a passo, você pode delegado a responsabilidade de gerar a data aleatória para o gerador de DateTime padrão.

Para substituir o método OnGenerateNextValues

  1. Substituir o OnGenerateNextValues método, sistema autônomo mostrado no exemplo a seguir.

    Protected Overrides Sub OnGenerateNextValues()
    
        '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 (randomRange.Next() Mod 2 = 0) Then  'check for odd or even
    
            'the standard generator does the work
            range1.GenerateNextValues()
            randomDateValue = range1.Result.Value
        Else
            'the standard generator does the work
            range2.GenerateNextValues()
            randomDateValue = range2.Result.Value
        End If
    
        MyBase.OnGenerateNextValues()
    End Sub
    
    protected override void OnGenerateNextValues()
    {
        //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 (randomRange.Next() % 2 == 0)  //check for odd or even
        {
            //the standard generator does the work
            range1.GenerateNextValues();
            randomDateValue = range1.Result.Value;
        }
        else
        {
            //the standard generator does the work
            range2.GenerateNextValues();
            randomDateValue = range2.Result.Value;
        }
    
        base.OnGenerateNextValues();
    }
    
  2. No menu File, clique em Save All.

Definindo o conversor de tipo

Para especificar as propriedades de entrada para este gerador de dados no Propriedades janela, você deve fornecer um conversor de tipo que converte os valores de entrada e para o SqlDateTime Digite.

Para criar a classe do conversor de tipo SqlDateTime

  1. No menu Project clique em Add Class.

    The Adicionar novo item caixa de diálogo é exibida.

  2. In Nome, type SqlDateTimeConverter.

  3. Na parte superior do Código janela, antes da declaração de classe, adicione as seguintes linhas de código:

    Imports System.ComponentModel
    Imports System.Data.SqlTypes
    Imports System.Globalization
    
    using System.ComponentModel;
    using System.Data.SqlTypes;
    using System.Globalization;
    
  4. Renomeie a classe de Class1 para GeneratorDateRangese especificar que a classe herda de TypeConverter.

    Public Class SqlDateTimeConverter
        Inherits TypeConverter
    
    End Class
    
    public class SqlDateTimeConverter: TypeConverter
    {
    }
    
  5. Dentro da declaração de classe, adicione o construtor da classe.Se você estiver criando a classe do conversor de tipo em Visual Basic, vá para a etapa 6.

    public SqlDateTimeConverter()
    {
    }
    
  6. Após o construtor de classe, adicione um método que verifica se esse tipo de conversor pode executar uma conversão específica.

    Public Overrides Function CanConvertFrom(ByVal context As ITypeDescriptorContext, ByVal sourceType As Type) As Boolean
        Dim result As Boolean
        result = False
        If (sourceType Is GetType(System.String)) Then
            result = True
        Else
            result = MyBase.CanConvertFrom(context, sourceType)
        End If
        Return result
    End Function 
    
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        bool result = false;
        if (sourceType == typeof(string))
        {
            result = true;
        }
        else
        {
            result = base.CanConvertFrom(context, sourceType);
        }
        return result;
    }
    
  7. Por fim, adicione os métodos de conversor.

    Public Overrides Function ConvertFrom(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object) As Object
        Dim dateTimeString As String
        dateTimeString = value.ToString
        If (dateTimeString.Length > 0) Then
            Dim dateTime As Date
            dateTime = Date.Parse(dateTimeString, culture)
            Return New SqlDateTime(dateTime)
        End If
        Return MyBase.ConvertFrom(context, culture, value)
    End Function
    
    Public Overrides Function CanConvertTo(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal destinationType As System.Type) As Boolean
        If (destinationType Is GetType(System.String)) Then
            Return True
        End If
        Return MyBase.CanConvertTo(context, destinationType)
    End Function
    
    Public Overrides Function ConvertTo(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object, ByVal destinationType As System.Type) As Object
        If (destinationType Is GetType(System.String)) Then
            Dim dateTime As Date
            dateTime = CType(value, SqlDateTime).Value
            dateTime.ToString(culture)
        End If
        Return MyBase.ConvertTo(context, culture, value, destinationType)
    End Function 
    
            public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
            {
                string dateTimeString = value as string;
                if (dateTimeString != null)
                {
                    DateTime dateTime = DateTime.Parse(dateTimeString, culture);
                    return new SqlDateTime(dateTime);
                }
                return base.ConvertFrom(context, culture, value);
            }
    
            public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
            {
                if (destinationType == typeof(string))
                {
                    return true;
                }
                return base.CanConvertTo(context, destinationType);
            }
    
            public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
            {
                if (destinationType == typeof(string))
                {
                    DateTime dateTime = ((SqlDateTime)value).Value;
                    dateTime.ToString(culture);
                }
                return base.ConvertTo(context, culture, value, destinationType);
            }
    
  8. No menu File, clique em Save All.

O gerador de assinatura

Todos os geradores de dados personalizados devem ser assinados com um nome forte antes que eles são registrados.

Para assinar o gerador de com um nome forte

  1. Sobre o Projeto menu, clicar Propriedades GeneratorDateRanges2 para em em aberto as propriedades do projeto.

  2. Sobre o Assinatura guia, selecionar o Assinar o assembly a caixa de seleção.

  3. No escolher um arquivo de chave de nome forte clicar**<New...>**.

  4. No nome de arquivo de chave caixa, digite GeneratorDateRanges2Key, digite e confirme uma senha e, em seguida, clicar OK.

    Quando você constrói sua solução, o arquivo de chave é usado para assinar o assembly.

  5. No menu File, clique em Save All.

  6. On the Compilação menu, clicar Criar solução.

    O gerador de dados foi criado agora.Em seguida, você deve registrá-lo em seu computador para que você pode usá-lo nos planos de geração de dados.

Segurança

Para obter mais informações, consulte Segurança dos geradores de dados.

Próximas etapas

Agora que você criou seu gerador de dados, você deve registrá-lo em seu computador.Para obter mais informações, consulte o seguinte:

Consulte também

Tarefas

Demonstra Passo a passo: Implantando um gerador de dados personalizados

Conceitos

Visão geral da extensibilidade do gerador de dados

Referência

Microsoft.VisualStudio.TeamSystem.Data.DataGenerator

Outros recursos

Criando geradores de dados personalizados

Usando os geradores de dados padrão

Explicações passo a passo de gerador de dados