Condividi tramite


Cenni preliminari sulla extensibility dei generatori di dati

Aggiornamento: novembre 2007

È possibile utilizzare Visual Studio Team System Database Edition per generare dati significativi per operazioni di testing. In particolare, utilizzando generatori di dati incorporati, è possibile generare dati casuali, generare dati da origini dati esistenti e controllare molti aspetti della generazione dati. Se la funzionalità dei generatori incorporati è insufficiente, è possibile creare generatori di dati personalizzati. Per creare generatori di dati personalizzati, utilizzare le classi dello spazio dei nomi Microsoft.VisualStudio.TeamSystem.Data.DataGenerator.

API Extensibility per la generazione dati

L'API Extensibility fornisce le classi da cui gli sviluppatori possono ereditare. Oltre alle classi, l'API include attributi che è possibile applicare alle classi derivate. Applicando tali attributi, si riduce la quantità di codice necessaria in generatori personalizzati per i casi comuni.

È possibile utilizzare l'API Extensibility nei seguenti quattro modi per creare generatori di dati personalizzati:

Extensibility

Descrizione

Livello di difficoltà

Esempio

Extensibility dichiarativa

  • Ereditare dalla classe Generator.

  • Aggiungere proprietà di input e output personalizzate.

Facile

Generatore di dati interi incorporato

Extensibility normale

Medio. Questo metodo è quello consigliato nella maggior parte dei casi.

Procedura dettagliata: creazione di un generatore dati personalizzato

Procedura dettagliata: creazione di un generatore dati personalizzato per un vincolo CHECK

Extensibility dell'aggregazione

  • Ereditare dalla classe Generator.

  • Aggiungere proprietà di input e output personalizzate.

  • Eseguire l'override di uno o più metodi Generator.

  • Nella classe corrente creare una o più istanze delle classi del generatore di dati standard e utilizzarle per le normali operazioni.

Medio

Procedura dettagliata: creazione di un generatore di dati personalizzato che aggrega i generatori standard

Extensibility di base

  • Creare una classe che implementi l'interfaccia IGenerator.

  • Implementare tutti i metodi richiesti dal generatore.

  • Creare una finestra di progettazione personalizzata per il generatore che implementa l'interfaccia IDesigner.

  • Implementare tutti i metodi richiesti dalla finestra di progettazione.

Difficile

none

Extensibility dell'aggregazione

Nell'extensibility dell'aggregazione si eredita in genere dalla classe Generator. Vengono quindi create una o più istanze delle classi del generatore di dati standard. Per accedere alle classi del generatore standard, è necessario aggiungere un riferimento a Microsoft.VisualStudio.TeamSystem.Data.Generators.dll, reperibile in ...\Programmi\Microsoft Visual Studio 9,0\DBPro\Extensions.

Extensibility di base

L'API Extensibility di base è il meccanismo mediante il quale il motore di generazione dati interagisce con le finestre di progettazione relative ai piani di generazione dati. È stata progettata per soddisfare gli obiettivi seguenti:

  • Affidabilità: promuovere un'implementazione coerente e stabile nei motori della fase di progettazione e di runtime.

  • Flessibilità: supportare generatori complessi come il generatore associato a dati.

Un compromesso di progettazione implicito nell'API Extensibility di base è una maggiore complessità rispetto all'API Extensibility dichiarativa di livello superiore.

Registrazione di generatori di dati personalizzati

Prima di poter utilizzare il generatore di dati personalizzato, è necessario registrarlo nel computer, Se il generatore viene distribuito ad altri utenti, questi dovranno registrarlo nei propri computer per poterlo utilizzare. È possibile registrare i generatori di dati personalizzati nei modi seguenti:

Metodo

Autorizzazioni necessarie

Esempio

Registrare il generatore nella cartella Private Assemblies.

Power User o superiore.

Procedura: registrare generatori di dati personalizzati

Procedura dettagliata: registrazione di un generatore di dati personalizzato

Registrare il generatore nella Global Assembly Cache.

Amministratore

none

Creare un progetto di distribuzione per registrare il generatore.

Amministratore

none

Generatori di dati, distribuzioni e finestre di progettazione

È possibile creare generatori di dati personalizzati e finestre di progettazione personalizzate per tali generatori. È inoltre possibile creare distribuzioni personalizzate per generatori di dati numerici e finestre di progettazione personalizzate per tali generatori.

  • I generatori di dati personalizzati producono dati di test casuali secondo l'insieme di regole che si saranno specificate. Con questi generatori è possibile utilizzare la finestra di progettazione predefinita oppure crearne una personalizzata ereditando da DefaultGeneratorDesigner. Il generatore di dati di espressioni regolari è ad esempio un generatore incorporato, ma utilizza una finestra di progettazione personalizzata in modo da poter eseguire la convalida personalizzata degli input utente in fase di progettazione.

  • Utilizzando una finestra di progettazione del generatore personalizzata, è possibile personalizzare le modalità di recupero delle proprietà di input e output da parte dell'utente, impostare i valori predefiniti e specificare il comportamento della convalida.

  • Utilizzando una distribuzione personalizzata, è possibile controllare la distribuzione dei valori numerici generati da un generatore di dati.

  • Le finestre di progettazione di distribuzione personalizzate controllano il comportamento in fase di progettazione per una distribuzione personalizzata. Questo comportamento include l'ottenimento dei nomi delle proprietà di input per la distribuzione, l'impostazione dei valori predefiniti delle proprietà di input e la convalida dei valori delle proprietà di input per la distribuzione.

Generatori di dati e localizzazione

I generatori di dati inclusi in Team Edition for Database Professionals sono localizzati perché Visual Studio viene distribuito in diverse lingue. Non è probabilmente necessario localizzare i generatori di dati personalizzati. Se è necessario creare un generatore di dati che verrà localizzato, creare una finestra di progettazione personalizzata. È inoltre possibile eseguire l'override del metodo GetInputs per localizzare i nomi delle proprietà di input.

Nota   Se possibile, ereditare dalla classe DefaultGeneratorDesigner e non implementare l'interfaccia IDesigner, per evitare lavoro aggiuntivo.

Creazione di istanze del generatore di dati

I generatori di dati personalizzati possono condividere i dati. L'ambito dei dati condivisi è costituito dal tipo di generatore e dalla tabella SQL. Ogni tipo di generatore ha un dizionario di istanze univoco per ogni tabella SQL. Ad esempio, un generatore di dati personalizzato per una tabella denominata Customers ha accesso a un dizionario condiviso. È possibile inserire tutte le informazioni desiderate nel dizionario e condividerle. Verrà utilizzata la stessa istanza del dizionario per ogni tipo di generatore e tabella. Ad esempio, è possibile creare un generatore di dati personalizzato e richiedere il dizionario da GeneratorInit. È quindi possibile verificare se il dizionario contiene informazioni condivise. In caso affermativo, è possibile utilizzare tali informazioni per generare dati. È inoltre possibile creare informazioni condivise utilizzabili da altre istanze del generatore.

Nota:

La creazione di istanze del generatore è una tecnica di livello avanzato. Può essere utilizzata per creare un generatore di dati personalizzato che gestisce vincoli CHECK tra le colonne, ad esempio un vincolo in base al quale una colonna deve essere maggiore di un'altra.

Processo di generazione dati

Di seguito sono elencate le fasi del processo di generazione dati:

Individuare il tipo della finestra di progettazione

Fase di progettazione

Per questa fase è necessario indicare come input il tipo del generatore di dati. Il motore può quindi eseguire una query su GeneratorAttribute in modo da recuperare il tipo della finestra di progettazione. Nella maggior parte dei casi, la classe GeneratorAttribute è ereditata dalla classe di base che specifica la finestra di progettazione predefinita.

Creare un'istanza della finestra di progettazione e inizializzarla

Fase di progettazione

Viene creata un'istanza della finestra di progettazione. Per inizializzare la finestra di progettazione viene chiamato il metodo Initialize passando come argomento il tipo del generatore.

Recuperare i descrittori di input

Fase di progettazione

Gli oggetti InputDescriptor vengono recuperati dalla finestra di progettazione. Nella finestra di progettazione predefinita questa operazione viene effettuata recuperando tutte le proprietà del tipo di generatore contrassegnate con InputAttribute.

Impostare i valori predefiniti

Fase di progettazione

Vengono impostati i valori predefiniti.

Ottenere le descrizioni dell'output del generatore

Fase di progettazione

Gli oggetti OutputDescriptor vengono recuperati dalla finestra di progettazione. Nella finestra di progettazione predefinita vengono utilizzate proprietà contrassegnate con OutputAttribute per creare le descrizioni visualizzate nella colonna Output generatore della finestra Dettagli colonna.

Creare istanze del generatore

Fase di esecuzione

Vengono create istanze del generatore di dati utilizzando il costruttore predefinito.

Impostare gli input del generatore

Fase di esecuzione

Per l'impostazione di tutti i valori di input nel generatore di dati vengono utilizzati i descrittori di input recuperati dalla finestra di progettazione.

Convalidare il generatore

Fase di esecuzione

Viene chiamato il metodo ValidateInputs. Se la convalida non riesce, il generatore genererà un'eccezione InputValidationException. Qualsiasi eccezione non correlata alla convalida dei dati viene considerata come un errore irreversibile.

Inizializzare il generatore

Fase di esecuzione

Viene chiamato il metodo Initialize. Tramite questa fase il generatore di dati è in grado di eseguire le eventuali impostazioni necessarie prima della generazione dati, ad esempio specificare la stringa di connessione per il database di destinazione o inizializzare il generatori di numeri casuali. Questa fase si verifica un'unica volta prima della generazione dati.

Eseguire la generazione dati

Fase di esecuzione

Durante questa fase vengono generati nuovi risultati mediante una chiamata al metodo GenerateNextValues. I risultati possono essere recuperati utilizzando il metodo GetOutputValue. Con questo metodo viene recuperato un valore scalare dal generatore che corrisponde alla chiave di output passata al generatore come input. In questa fase vengono scorsi i risultati finché non vengono generati tutti i risultati desiderati.

Pulire il generatore

Fase di esecuzione

Al termine della generazione dati, viene chiamato il metodo Dispose per la pulitura del generatore.

Sicurezza

Per ulteriori informazioni, vedere Protezione dei generatori di dati.

Vedere anche

Attività

Procedura: creare generatori di dati personalizzati

Procedura dettagliata: creazione di un generatore dati personalizzato

Riferimenti

Microsoft.VisualStudio.TeamSystem.Data.DataGenerator

Altre risorse

Creazione di generatori di dati personalizzati

Procedure dettagliate per i generatori di dati