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
In Visual Studio, crie um projeto classe biblioteca no linguagem de sua escolha e denomine GeneratorDateRanges2.
No menu Project, escolha Add Reference.
The Adicionar referência caixa de diálogo é exibida.
clicar no NET guia.No Nome do componente lista, clicar Microsoft.VisualStudio.TeamSystem.dados e, em seguida, clicar OK.
No menu Project, escolha Add Reference.
The Adicionar referência caixa de diálogo é exibida.
clicar no Procurar guia e procure o local...\Arquivos de programas\Microsoft visual Studio 9.0\DBPro\Extensions.
clicar Microsoft.VisualStudio.TeamSystem.dados.Generators.dll e, em seguida, clicar OK.
(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.
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;
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 { }
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
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;
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;} }
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
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;
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;} }
No menu File, clique em Save All.
Substituindo o método OnInitialize
Para substituir o método OnInitialize
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;
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();
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); }
No menu File, clique em Save All.
Substituindo outros métodos
Para substituir os outros métodos
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(); }
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(); }
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); }
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
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(); }
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
No menu Project clique em Add Class.
The Adicionar novo item caixa de diálogo é exibida.
In Nome, type SqlDateTimeConverter.
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;
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 { }
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() { }
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; }
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); }
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
Sobre o Projeto menu, clicar Propriedades GeneratorDateRanges2 para em em aberto as propriedades do projeto.
Sobre o Assinatura guia, selecionar o Assinar o assembly a caixa de seleção.
No escolher um arquivo de chave de nome forte clicar**<New...>**.
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.
No menu File, clique em Save All.
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