Demonstra Passo a passo: Criando um gerador de dados personalizada para um teste de verificação
Você pode usar os geradores de dados padrão para preencher colunas com dados em Visual Studio Team System Database Edition. Se a coluna que você deseja preencher tiver um restrição CHECK definidas nela, os dados com o qual você preenche a coluna devem satisfazer a restrição CHECK.Os geradores de dados padrão podem gerar os dados que satisfaçam várias restrições de verificação.Por exemplo, se você tiver um restrição CHECK que requer que um data está em um determinado intervalo, você pode usar o gerador de DateTime padrão e conjunto as propriedades min e max para satisfazer que restrição CHECK.
No entanto, os geradores de dados padrão não podem satisfazer todas as restrições de verificação.Por exemplo, se um teste de verificação requer que uma data em qualquer um dos dois intervalos distintos, você não poderá usar o gerador de DateTime padrão.Nesta explicação passo a passo, você criar um gerador de dados personalizados que pode satisfazer esse uma restrição.O gerador aceita dois intervalos sistema autônomo entrada e gera uma data aleatória em um desses intervalos.
Observação: |
---|
Você pode usar outra abordagem para criar um gerador de dados personalizados e atingir o mesmo meta usando extensibilidade de agregação.Para obter mais informações, consulte Demonstra Passo a passo: Criando um gerador de dados personalizado que agrega geradores padrã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.
Substituir o OnInitialize método para propagar a Random objetos e tornar seu gerador de determinista.
Substituir o OnGenerateNextValues método para gerar os dados.
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, criar um projeto classe biblioteca no linguagem de sua escolha e denomine GeneratorDateRanges.
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.
(Opcional, Visual Basic In somente) O gerenciador de soluções, clicar Mostrar todos os arquivos e expandir o nó References para verificar a nova referência.
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 System.Data.SqlTypes
using Microsoft.VisualStudio.TeamSystem.Data.DataGenerator; using System.Data.SqlTypes;
Renomeie a classe de Class1 para GeneratorDateRangese especificar que a classe herda de Generator.
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 GeneratorDateRanges Inherits Generator End Class
public class GeneratorDateRanges: 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 Isenção mínimo e máximo datas para a data de dois intervalos.
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 propriedades devem ter o InputAttribute para identificá-las sistema autônomo propriedades de entrada.
<Input(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(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(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(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(TypeConverter = typeof(SqlDateTimeConverter))] public SqlDateTime Range1Min { set {range1MinValue = value;} get {return range1MinValue;} } [Input(TypeConverter = typeof(SqlDateTimeConverter))] public SqlDateTime Range1Max { set {range1MaxValue = value;} get {return range1MaxValue;} } [Input(TypeConverter = typeof(SqlDateTimeConverter))] public SqlDateTime Range2Min { set {range2MinValue = value;} get {return range2MinValue;} } [Input(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 data aleatória que é a saída.
Dim randomDateValue As SqlDateTime
SqlDateTime randomDateValue;
Crie uma propriedade para retornar a data aleatória sistema autônomo a saída.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
Ao gerar dados aleatórios, pode ser determinística ou não-determinística.Dados deterministas repete os mesmos dados sempre que você a gerar de semente mesma.Todos os geradores de dados possuem um Seed propriedade que o usuário pode conjunto. Você pode substituir o OnInitialize método para propagar a Random objetos e tornar seu gerador de determinista.
Para substituir o método OnInitialize
Criar duas variáveis de membro para gerar números aleatórios, sistema autônomo mostrado no exemplo a seguir.Uma variável gera uma data aleatória.A Outros variável escolhe aleatoriamente entre dois intervalos de data possível.
Dim random As Random Dim randomRange As Random
Random random; Random randomRange;
Substitua o método OnInitialize.
Protected Overrides Sub OnInitialize(ByVal initInfo As GeneratorInit) random = New Random(Me.Seed) 'deterministic randomRange = New Random(Me.Seed) 'deterministic 'random = New Random() 'non-deterministic 'randomRange = New Random() 'non-deterministic MyBase.OnInitialize(initInfo) End Sub
protected override void OnInitialize(GeneratorInit initInfo) { random = new Random(this.Seed); //deterministic randomRange = new Random(this.Seed); //deterministic //random = new Random(); //non-deterministic //randomRange = new Random(); //non-deterministic base.OnInitialize(initInfo); }
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.
Para substituir o método OnGenerateNextValues
Substituir o OnGenerateNextValues método, sistema autônomo mostrado no exemplo a seguir.
Protected Overrides Sub OnGenerateNextValues() Dim min As SqlDateTime Dim max As SqlDateTime '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 min = range1MinValue max = range1MaxValue Else min = range2MinValue max = range2MaxValue 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.Value - min.Value '(size of range * random number between 0 and 1) Dim randomNumber As TimeSpan = New TimeSpan(CLng(range.Ticks * random.NextDouble())) 'start of range + (size of range * random number between 0 and 1) randomDateValue = min + randomNumber End Sub
protected override void OnGenerateNextValues() { SqlDateTime min; SqlDateTime 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 (randomRange.Next() % 2 == 0) //check for odd or even { min = range1MinValue; max = range1MaxValue; } else { min = range2MinValue; max = range2MaxValue; } //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.Value - min.Value; //(size of range * random number between 0 and 1) TimeSpan randomNumber = new TimeSpan((long)(range.Ticks * random.NextDouble())); //start of range + (size of range * random number between 0 and 1) randomDateValue = min + randomNumber; }
No menu File, clique em Save All.
Definindo o conversor de tipo
Para especificar as propriedades de entrada para esse gerador de dados no navegador da propriedade, forneça 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.
A caixa de diálogo Add New Item aparece.
Em nome, digite 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.
[Visual Basic] 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 escrevendo o tipo de conversor de classe no Visual Basic, vá para a etapa 6.
public SqlDateTimeConverter() { }
Após o construtor de classe, adicione um método que verifica se uma conversão específica serão possível por este conversor de tipo.
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 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 override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { bool result = false; if (sourceType == typeof(string)) { result = true; } else { result = base.CanConvertFrom(context, sourceType); } return result; } public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == typeof(string)) { return true; } return base.CanConvertTo(context, destinationType); }
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 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 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 GeneratorDateRanges 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 GeneratorDateRangesKey, 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