Condividi tramite


Script negli unit test di SQL Server

Ogni unit test di SQL Server contiene una singola azione di pre-test, un'azione di test e un'azione post-test. Ognuna di queste azioni a sua volta contiene:

  • Uno script Transact-SQL che viene eseguito su un database.
  • Zero 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 SQL Server. Oltre allo script di test stesso, è consigliabile specificare anche le condizioni di test per verificare se lo script di test ha restituito il valore o il set di valori previsti. L'azione del test modifica un particolare oggetto nel database e quindi valuta tale modifica.

Per ogni azione di test, è possibile includere un'azione di pre-test e un'azione post-test. Analogamente all'azione di test, ogni azione di pre-test e ogni azione post-test contiene uno script Transact-SQL e zero o più condizioni di test. È possibile usare un'azione di pre-test per assicurarsi che il database si trovi in uno stato che consente all'azione di test di eseguire e restituire risultati significativi. Ad esempio, è possibile usare 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 prepara il database e l'azione di test restituisce risultati significativi, è possibile usare l'azione post-test per restituire il database allo stato in cui si trovava prima dell'esecuzione dell'azione di pre-test. In alternativa, in alcuni casi, è possibile usare l'azione post-test per convalidare i risultati dell'azione di test. Ciò è dovuto al fatto che l'azione post-test può avere privilegi di database maggiori rispetto all'azione di test. Per altre informazioni, vedere Panoramica delle stringhe di connessione e delle autorizzazioni.

Oltre a queste tre azioni, esistono anche due script di test (detti script comuni), che vengono eseguiti prima e dopo l'esecuzione di ogni unit test di SQL Server. Di conseguenza, è possibile eseguire fino a cinque script Transact-SQL durante l'esecuzione di un singolo unit test di SQL Server. È necessario solo lo script Transact-SQL contenuto nell'azione di test; gli script comuni e gli script di azione di pre-test e post-test sono facoltativi.

Nella tabella seguente viene fornito un elenco completo degli script associati a qualsiasi unit test di SQL Server.

Action Tipo di script Description
TestInitialize Script comune (inizializzazione) (Facoltativo) Questo script precede tutte le azioni di pre-test e test nello unit test. Lo script TestInitialize viene eseguito prima di ogni unit test in una determinata classe di test. Questo script viene eseguito usando il contesto con privilegi.
Test preliminare 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. Questo script viene eseguito usando il contesto con privilegi.
Test Script di test (Obbligatorio) Questo script fa parte dello unit test. Questo script potrebbe, ad esempio, eseguire una stored procedure che ottiene, inserisce o aggiorna i valori della tabella. Questo script viene eseguito usando 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. Questo script viene eseguito usando il contesto con privilegi.
TestCleanup Script comune (pulizia) (Facoltativo) Questo script segue lo unit test. Lo script TestCleanup viene eseguito dopo tutti gli unit test in una determinata classe di test. Questo script viene eseguito usando il contesto con privilegi.

Per altre informazioni sui diversi contesti di sicurezza in cui vengono eseguiti ognuno di questi script, vedere Panoramica delle stringhe di connessione e delle autorizzazioni. È anche possibile esaminare la sezione autorizzazioni di unit test di SQL Server in Autorizzazioni necessarie per SQL Server Data Tools.

Ordine in cui vengono eseguiti gli script

È importante comprendere l'ordine in cui viene eseguito ogni script. Anche se non è possibile modificare l'ordine, è possibile decidere quali script si desidera eseguire. La figura seguente include la selezione di script che è possibile usare in un'esecuzione di test che contiene due unit test di SQL Server e mostra l'ordine in cui vengono eseguiti:

Diagramma di due test unitari di database.

Annotazioni

Se la distribuzione del progetto di database di SQL Server è configurata, questo passaggio si verifica all'inizio dell'esecuzione del test, nella stringa di connessione del contesto con privilegi. Per altre informazioni, vedere Procedura: Configurare l'esecuzione di unit test di SQL Server.

Script di inizializzazione e pulizia

Nella finestra di progettazione unit test di SQL Server gli script TestInitialize e TestCleanup vengono definiti script comuni. Nell'esempio precedente si presuppone che i due unit test facciano parte della stessa classe di test. Di conseguenza, condividono gli stessi script TestInitialize e TestCleanup. Per tutti gli unit test all'interno di una singola classe di test, questo è sempre il caso. Tuttavia, se l'esecuzione del test contiene unit test di classi di test diverse, gli script comuni per la classe di test associata vengono eseguiti prima e dopo l'esecuzione dello unit test.

Se si scrivono unit test solo usando la finestra di progettazione unit test di SQL Server, è possibile che non si abbia familiarità con il concetto di una classe di test. Ogni volta che si crea uno unit test aprendo il menu Test e selezionando Nuovo test, SQL Server Data Tools genera una classe di test. Le classi di test vengono visualizzate in Esplora soluzioni con il nome del test specificato, seguito da un'estensione .cs o .vb . All'interno di ogni classe di test, i singoli unit test vengono archiviati come metodi di test. Tuttavia, indipendentemente dal numero di metodi di test(ovvero unit test), ogni classe di test può avere zero o uno script TestInitialize e TestCleanup.

È possibile usare lo script TestInitialize per preparare il database di test ed è possibile usare lo script TestCleanup per restituire il database di test a uno stato noto. Ad esempio, è possibile usare TestInitialize per creare una stored procedure di supporto che verrà eseguita successivamente, nello script di test, per testare una stored procedure diversa.

Script di test preliminare e finale

Gli script associati alle azioni di pre-test e post-test possono variare da uno unit test al successivo. È possibile usare questi script per stabilire modifiche incrementali al database e quindi pulire tali modifiche.