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 |
|
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 |
Medio |
||
Extensibility di base |
|
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.
![]() |
---|
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