Condividi tramite


Cenni preliminari sull'esecuzione di unit test del database

Aggiornamento: novembre 2007

È possibile utilizzare unit test del database per definire lo stato di base del database e verificare eventuali modifiche successive apportate agli oggetti di database. È innanzitutto necessario scrivere set di test T-SQL incentrati su un determinato oggetto di database e verificare il corretto funzionamento di tale oggetto. Quando in seguito si modificherà lo schema sottostante, sarà possibile utilizzare questi test per verificare che le modifiche non abbiano influito sulla funzionalità esistente. La scrittura di unit test che consentono di valutare l'impatto positivo o negativo di modifiche apportate alla progettazione del database assicura che le modifiche vengano applicate come previsto e senza introdurre errori. Gli unit test del database costituiscono un'integrazione degli unit test del software creati dagli sviluppatori di software. Entrambi i set di unit test sono necessari per la gestione delle modifiche complessive all'applicazione.

Per scrivere unit test, è innanzitutto necessario creare un ambiente di sviluppo del database isolato distinto dal database di produzione. Utilizzando Visual Studio Team System Database Edition vengono eseguiti i passaggi di base seguenti:

  1. Creare un progetto di database

  2. Importare nel progetto lo schema del database di produzione

  3. Distribuire il progetto di database in modo da creare un database che utilizza lo stesso schema del database di produzione

  4. Popolare il database con i dati di test

Dopo aver definito l'ambiente di sviluppo del database isolato e averlo popolato con i dati, è quindi possibile iniziare a scrivere unit test per valutare gli oggetti di database in tale ambiente. Dopo aver eseguito il test degli oggetti di database, sarà possibile utilizzare tali unit test per rilevare le regressioni verificatesi nella funzionalità a causa delle modifiche apportate al database. L'esecuzione dei test relativi all'effetto delle modifiche in un ambiente di sviluppo isolato consente di evitare che il database di produzione venga compromesso. Dopo aver completato i test, sarà possibile ridistribuire gli unit test in un ambiente di test più esteso, contenente le modifiche apportate da altri membri del team, in cui sarà possibile identificare e correggere rapidamente regressioni causate da ulteriori modifiche del database.

È inoltre possibile eseguire unit test nell'ambito del processo di distribuzione manuale. In tal caso, sarà necessario generare uno script di compilazione da un insieme di origini con etichetta e modificarlo in base alle necessità, quindi distribuire il database in un server di gestione temporanea ed eseguire gli unit test del database e software per verificare lo stato complessivo delle applicazioni e del database. Una volta superati tutti i test, sarà possibile ridistribuire il database nell'ambiente di produzione. Per ulteriori informazioni, vedere Gestione delle modifiche al database.

Creazione di unit test del database

È possibile creare unit test del database per valutare le modifiche apportate agli oggetti di database. Database Edition include tuttavia del supporto aggiuntivo per funzioni di database, trigger e stored procedure. Quando si crea un test per questi oggetti, verranno automaticamente generati stub di codice T-SQL personalizzabili per testare l'oggetto di database. Per ulteriori informazioni, vedere Procedura: creare unit test del database per funzioni, trigger e stored procedure e Procedura: creare uno unit test del database vuoto.

Nota:

È possibile creare ed eseguire unit test del database senza disporre di un progetto di database aperto. Per generare script T-SQL dagli oggetti da testare, è tuttavia necessario che il progetto di database che contiene tali oggetti sia aperto.

Progettazione di unit test

Analogamente ad altri tipi di test incorporati in Visual Studio Team System Test Edition, anche gli unit test del database sono integrati in Visual Studio. È possibile utilizzare la finestra di progettazione unit test del database per definire script di test T-SQL (Transact-SQL) che eseguono script di database e quindi valutano i risultati di tali script in base a condizioni di test che indicano se l'azione dello script è stata eseguita o meno.

La finestra di progettazione unit test del database include le seguenti funzionalità:

Funzionalità

Scopo

Barra di spostamento - casella di riepilogo Nome test

Selezionare singoli unit test del progetto di test in base al nome oppure selezionare Script comuni per sviluppare script eseguiti prima o dopo ogni unit test nella stessa classe di test.

Barra di spostamento - casella di riepilogo Test

Selezionare le opzioni di pre-test, di test o di post-test per scrivere script T-SQL e condizioni di test che verranno valutate in momenti diversi durante lo unit test. È possibile utilizzare lo script di pre-test per definire uno stato specifico nel database di sviluppo. È invece possibile utilizzare lo script di post-test per ripristinare lo stato iniziale del database dopo l'esecuzione del test oppure per valutare l'esito del test, a seconda delle autorizzazioni necessarie.

Editor T-SQL

Utilizzare questo editor per scrivere lo script T-SQL di pre-test, di test o di post-test che verrà utilizzato nello unit test. Se si utilizza il comando RAISERROR di T-SQL, è inoltre possibile scrivere nello script di test istruzioni di asserzione T-SQL anziché condizioni di test. È inoltre possibile utilizzare questo comando, analogamente alle condizioni di test, per indicare se il test è stato o meno superato in base al valore di gravità. Per ulteriori informazioni, vedere Utilizzo di asserzioni T-SQL in unit test del database.

Riquadro Condizioni di test

Utilizzare le condizioni di test visualizzate in questa finestra per valutare i risultati dell'esecuzione dello script T-SQL.

Utilizzo delle condizioni di test

Il riquadro Condizioni di test include un insieme di condizioni di test predefinite per testare elementi quali il numero di righe restituito in un gruppo di risultati, il tempo necessario per eseguire lo script T-SQL e se un gruppo di risultati è vuoto. Per ogni condizione di test predefinita è disponibile un metodo Assert, definito sulla classe TestCondition di base, che viene chiamato durante la valutazione della condizione. Se una condizione di test non viene soddisfatta durante la valutazione dei risultati dell'esecuzione in base ai risultati desiderati, verrà generata un'eccezione e nella finestra Risultati del test verrà restituito un risultato di test non superato. Se invece il test è stato superato, non verrà generata nessuna eccezione.

Quando si esegue il test, lo script T-SQL viene eseguito per primo e restituisce un risultato, corrispondente in genere a un gruppo di risultati. L'implementazione della condizione di test determina quale parte delle informazioni restituite verrà valutata ai fini dell'esito del test. La condizione di test Ora di esecuzione consente ad esempio di valutare il tempo necessario per eseguire lo script T-SQL, mentre la condizione di test Valore scalare consente di valutare un valore in una determinata riga. A seconda del risultato di questa valutazione, verrà visualizzato un indicatore di test superato o non superato nella finestra Risultati del test. L'indicatore di test superato/non superato dipende dal completamento senza errori della valutazione di tutte le condizioni di test per lo script di test. Se viene generata un'eccezione per un'unica condizione, l'intero test risulterà non superato.

Sono disponibili sei condizioni di test predefinite. Poiché tuttavia le condizioni di test sono estensibili, se necessario, è possibile aggiungerne altre all'elenco delle condizioni di test. È inoltre possibile utilizzare la funzione RAISERROR di T-SQL nello script T-SQL per ottenere un risultato di test superato o non superato e fare in modo che venga visualizzato nella finestra Risultati del test. Per ulteriori informazioni, vedere la classe Utilizzo di asserzioni T-SQL in unit test del database.

Nota:

Agli unit test generati in Test Edition e agli unit test del database generati in Database Edition viene aggiunta automaticamente una condizione di test senza risultati. Se viene valutata questa condizione di test, i test verranno contrassegnati come "senza risultati". Con la condizione di test senza risultati viene generata una InconclusiveException. Per impostazione predefinita, questa condizione viene inclusa in tutti i test per ricordare all'utente di aggiungere altre asserzioni o condizioni di test. Questa condizione di test può essere facilmente rimossa, selezionandola nella finestra Condizioni di test e facendo clic sull'icona Elimina condizione di test.

Per un elenco completo delle condizioni di test predefinite, vedere Utilizzo di condizioni di test negli unit test del database.

È inoltre possibile che i test non vengano superati in caso di superamento del timeout o se vengono interrotti. Per ulteriori informazioni sui risultati visualizzabili nella finestra Risultati del test, vedere Risultati dei test di base.

Unit test e dati di test

È possibile utilizzare la funzionalità di generazione dei dati di Team Edition for Database Professionals per aggiungere dati di test all'ambiente di database. Questa funzionalità include un gruppo di generatori di dati che consentono di ottenere gli stessi dati specificando un determinato valore di inizializzazione. In tal modo sarà possibile generare i dati, controllare il database generato per determinare i risultati ottenibili con test diversi e scrivere i test di conseguenza. Per ulteriori informazioni sull'utilizzo della funzionalità di generazione dei dati con gli unit test, vedere Procedura dettagliata: creazione ed esecuzione di uno unit test del database. Per ulteriori informazioni sui diversi generatori di dati disponibili, vedere Cenni preliminari sulla generazione di dati.

Esecuzione di test dalla riga di comando

È possibile eseguire unit test del database all'interno dell'IDE o dal prompt dei comandi se si desidera automatizzare le esecuzioni di test. Per ulteriori informazioni, vedere Esecuzione di test dalla riga di comando.

Vedere anche

Attività

Procedura: aggiungere condizioni di test a unit test del database

Concetti

Panoramica dell'Editor Transact-SQL

Panoramica sulla terminologia di Database Edition