Script negli unit test del database
Ogni unit test del database contiene un'azione di pre-test, un'azione di test e un'azione di post-test. Ognuna di queste azioni contiene a sua volta quanto segue:
uno script Transact-SQL eseguibile su un database
nessuna o più condizioni di test che valutano i risultati restituiti dall'esecuzione dello script.
Lo script di test Transact-SQL nell'azione di test è l'unico componente che è necessario includere in ogni unit test di database. Oltre allo script di test, è possibile specificare le condizioni di test per verificare se lo script di test ha restituito il valore o l'insieme di valori previsto. L'azione di test verifica il comportamento di un determinato oggetto del database oppure lo modifica e quindi valuta tale modifica.
Per ogni azione di test è possibile includere un'azione di pre-test e un'azione di post-test. Analogamente all'azione di test, ogni azione di pre-test e di post-test contiene uno script Transact-SQL e nessuna o più condizioni di test. È possibile utilizzare un'azione di pre-test per assicurarsi che lo stato in cui si trova il database consenta l'esecuzione dell'azione di test e restituisca risultati significativi. È ad esempio possibile utilizzare un'azione di pre-test per verificare che una tabella contenga dati prima che lo script di test esegua un'operazione su tali dati. Dopo che l'azione di pre-test ha preparato il database e l'azione di test ha restituito risultati significativi, l'azione di post-test ripristina lo stato del database precedente all'esecuzione dell'azione di pre-test. In alcuni casi è possibile utilizzare l'azione post-test per convalidare i risultati dell'azione di test. L'azione di post-test può infatti disporre di maggiori privilegi per il database rispetto all'azione di test. Per ulteriori informazioni, vedere Cenni preliminari sulle stringhe di connessione e sulle autorizzazioni.
Oltre a queste tre azioni, sono disponibili anche due script di test, definiti script comuni, che vengono eseguiti prima e dopo uno unit test del database. Di conseguenza, durante l'esecuzione di un singolo unit test del database è possibile eseguire fino a cinque script Transact-SQL. Solo lo script Transact-SQL contenuto all'interno dell'azione di test è obbligatorio, mentre gli script comuni e gli script delle azioni di pre-test e di post-test sono facoltativi.
Nella tabella seguente viene fornito l'elenco completo degli script associati a uno unit test del database.
Azione |
Tipo di script |
Descrizione |
---|---|---|
TestInitialize |
Script comune (inizializzazione) |
(Facoltativo) Questo script precede tutte le azioni di pre-test e le azioni di test nello unit test. Lo script TestInitialize viene eseguito prima di ogni unit test in una determinata classe di test utilizzando il contesto autorizzato. |
Pre-test |
Script di test |
(Facoltativo) Questo script fa parte dello unit test. Lo script di pre-test viene eseguito prima dell'azione di test all'interno di uno unit test utilizzando il contesto autorizzato. |
Test |
Script di test |
(Obbligatorio) Questo script fa parte dello unit test. Lo script di test viene eseguito sul database. Potrebbe, ad esempio, eseguire una stored procedure che ottiene, inserisce o aggiorna i valori di tabella. Viene eseguito utilizzando il contesto di esecuzione. |
Post-test |
Script di test |
(Facoltativo) Questo script fa parte dello unit test. Lo script di post-test viene eseguito dopo un singolo unit test utilizzando il contesto autorizzato. |
TestCleanup |
Script comune (pulitura) |
(Facoltativo) Questo script segue lo unit test. Lo script TestCleanup viene eseguito dopo tutti gli unit test in una determinata classe di test utilizzando il contesto autorizzato. |
Per ulteriori informazioni sui vari contesti di sicurezza in cui viene eseguito ognuno di questi script, vedere Cenni preliminari sulle stringhe di connessione e sulle autorizzazioni e la sezione relativa alle autorizzazioni per gli unit test del database nell'argomento Autorizzazioni necessarie per le funzionalità di database di Visual Studio.
Ordine di esecuzione degli script
L'ordine di esecuzione di ogni script è un aspetto fondamentale da considerare. Anche se tale ordine non può essere modificato, è possibile decidere quali script si desidera eseguire. Nella figura seguente viene illustrata la selezione degli script che è possibile utilizzare in un'esecuzione di test che contiene due unit test del database e viene indicato l'ordine in cui vengono eseguiti:
Nota
Le modifiche apportate alla generazione dati e alla distribuzione del database vengono applicate all'inizio dell'esecuzione dei test, prima dell'esecuzione degli script, utilizzando la stringa di connessione del contesto autorizzato. Per ulteriori informazioni, vedere Procedura: configurare l'esecuzione di unit test del database.
Script di inizializzazione e pulitura
Nella finestra di progettazione unit test del database gli script TestInitialize e TestCleanup vengono definiti script comuni. Nell'esempio precedente si presuppone che due unit test facciano parte della stessa classe di test. Di conseguenza, condividono gli stessi script TestInitialize e TestCleanup. Questa situazione si verifica sempre per tutti gli unit test all'interno di un'unica classe di test. Se invece l'esecuzione di test contiene unit test di classi di test diverse, gli script comuni relativi alla classe di test associata verranno eseguiti prima e dopo l'esecuzione degli unit test.
Se si scrivono unit test utilizzando solo la finestra di progettazione unit test del database, è possibile che non si abbia familiarità con il concetto di classe di test. Ogni volta che si crea uno unit test scegliendo Nuovo test dal menu Test in Visual Studio Premium, viene generata una classe di test. Le classi di test vengono visualizzate in Esplora soluzioni con il nome di test specificato, seguito da un'estensione cs o vb. All'interno di ogni classe di test i singoli unit test vengono memorizzati come metodi di test. Tuttavia, indipendentemente dal numero di metodi di test (ovvero di unit test), ogni classe di test può contenere nessuno o uno script TestInitialize e TestCleanup.
È possibile utilizzare lo script TestInitialize per preparare il database di test e lo script TestCleanup per ripristinare uno stato noto del database di test. È ad esempio possibile utilizzare TestInitialize per creare una stored procedure di supporto da eseguire in seguito nello script di test per testare una stored procedure diversa.
Script di pre-test e di post-test
Gli script associati alle azioni di pre-test e di post-test variano in genere da uno unit test a quello successivo. È possibile utilizzare questi script per stabilire modifiche incrementali nel database e quindi eliminarle.