Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In uno unit test di SQL Server vengono eseguiti uno o più script di test Transact-SQL. I risultati possono essere valutati all'interno dello script Transact-SQL e THROW o RAISERROR usati per restituire un errore e non superano il test oppure è possibile definire le condizioni di test nel test per valutare i risultati. Il test restituisce un'istanza della classe SqlExecutionResult . L'istanza di questa classe contiene uno o più set di dati, il tempo di esecuzione e le righe interessate dallo script. Tutte queste informazioni vengono raccolte durante l'esecuzione dello script. Questi risultati possono essere valutati usando condizioni di test. SQL Server Data Tools offre un set di condizioni di test predefinite. È anche possibile creare e usare condizioni personalizzate; vedere Condizioni di test personalizzate per unit test di SQL Server.
Condizioni di test predefinite
Nella tabella seguente sono elencate le condizioni di test predefinite che è possibile aggiungere usando il riquadro Condizioni di test in Progettazione unit test di SQL Server.
| Condizione di test | Descrizione della condizione di test |
|---|---|
| Dati checksum | Ha esito negativo se il checksum del set di risultati restituito dallo script Transact-SQL non corrisponde al checksum previsto. Per altre informazioni, vedere Specificare un checksum dei dati. Nota: Questa condizione di test non è consigliata se si restituiscono dati che variano tra le esecuzioni di test. Ad esempio, se il set di risultati contiene date o ore generate o contiene colonne Identity, i test hanno esito negativo perché il checksum è diverso in ogni esecuzione. |
| ResultSet vuoto | Ha esito negativo se il set di risultati restituito dallo script Transact-SQL non è vuoto. |
| Tempo di esecuzione | Ha esito negativo se lo script di test Transact-SQL richiede più tempo del previsto per l'esecuzione. Il tempo di esecuzione predefinito è 30 secondi. Il tempo di esecuzione si applica solo al test dello script di test, non allo script di pre-test o allo script post-test. |
| Schema previsto | Ha esito negativo se le colonne e i tipi di dati del set di risultati non corrispondono a quelli specificati per la condizione di test. È necessario specificare uno schema tramite le proprietà della condizione di test. Per altre informazioni, vedere Specifica di uno schema previsto. |
| Senza risultati | Produce sempre un test con il risultato di Inconclusive. Questa è la condizione predefinita aggiunta a ogni test. Questa condizione di test è inclusa per indicare che la verifica di test non è stata implementata. Eliminare questa condizione di test dal test dopo aver aggiunto altre condizioni di test. |
| ResultSet non vuoto | Ha esito negativo se il set di risultati è vuoto. È possibile usare questa condizione di test o EmptyResultSet con la funzione Transact-SQL @@RAISERROR nello script di test per verificare se un aggiornamento ha funzionato correttamente. Ad esempio, è possibile salvare i valori di pre-aggiornamento, eseguire l'aggiornamento, confrontare i valori post-aggiornamento e generare un errore se non si ottengono i risultati previsti. |
| Conteggio righe | Ha esito negativo se il set di risultati non contiene il numero previsto di righe. |
| Valore scalare | Ha esito negativo se un determinato valore nel set di risultati non è uguale al valore specificato. Il valore previsto predefinito è Null. |
La condizione di test Tempo di esecuzione specifica un limite di tempo in base al quale deve essere eseguito lo script di test Transact-SQL. Se questo limite di tempo viene superato, il test ha esito negativo. I risultati dei test includono anche una statistica sulla Durata, che differisce dalla condizione di test relativa al Tempo di esecuzione. La statistica Durata include non solo il tempo di esecuzione, ma anche il tempo di connessione al database due volte; il tempo necessario per eseguire qualsiasi altro script di test, ad esempio lo script di pre-test e lo script di post-test; e il tempo necessario per eseguire le condizioni di test. Pertanto, un test può superare anche se la durata è superiore al tempo di esecuzione.
La durata segnalata non include il tempo usato per la generazione dei dati e la distribuzione dello schema perché si verificano prima dell'esecuzione dei test. Per visualizzare la durata del test, selezionare un'esecuzione di test nella finestra Risultati test, fare clic con il pulsante destro del mouse e scegliere Visualizza dettagli risultati test.
È possibile aggiungere condizioni di test agli unit test di SQL Server utilizzando il pannello Condizioni di Test del Designer di Unit Test di SQL Server. Per altre informazioni, vedere Procedura: Aggiungere condizioni di test agli unit test di SQL Server.
È anche possibile modificare direttamente il codice del metodo di test per aggiungere altre funzionalità. Per altre informazioni, vedere Procedura: Aprire uno unit test di SQL Server da modificare e Procedura: Scrivere uno unit test di SQL Server eseguito nell'ambito di una singola transazione. Ad esempio, è possibile aggiungere funzionalità a un metodo di test aggiungendo istruzioni Assert. Per altre informazioni, vedere Usare Transact-SQL asserzioni negli unit test di SQL Server.
Errori previsti
È possibile creare unit test di SQL Server per testare il comportamento che non dovrebbe avere esito positivo. Questi errori previsti vengono talvolta definiti test negativi. Alcuni esempi includono:
- Verificare che una stored procedure per l'eliminazione dei dati di un cliente non funzioni se si specifica un ID cliente non valido.
- Verificare che una stored procedure che riempia un ordine abbia esito negativo se l'ordine non è mai stato effettuato o se l'ordine è già stato compilato.
- Verificare che una stored procedure che annulla un ordine non possa annullare gli ordini completati o gli ordini già annullati.
È possibile definire unit test di SQL Server per stored procedure che generano eccezioni previste. È possibile aggiungere un attributo al metodo unit test per indicare quali eccezioni o eccezioni sono previste. In questo modo si impedisce che il test non riesca quando si verifica l'eccezione.
Per contrassegnare un metodo di unit test di SQL Server con eccezioni previste, aggiungere l'attributo seguente:
[ExpectedSqlException(MessageNumber = nnnnn, Severity = x, MatchFirstError = false, State = y)]
Where:
- nnnnn è il numero del messaggio previsto, ad esempio 14025
- x è la gravità dell'eccezione prevista
- y è lo stato dell'eccezione prevista
Tutti i parametri non specificati vengono ignorati. Questi parametri vengono passati all'istruzione THROW nel codice del database. Se si specifica MatchFirstError = false, l'attributo corrisponde a uno qualsiasi degli errori SQL nell'eccezione. Il comportamento predefinito (MatchFirstError = true) corrisponde solo al primo errore che si verifica.
Per un esempio di come usare le eccezioni previste e uno unit test negativo di SQL Server, vedere Procedura dettagliata: Creare ed eseguire uno unit test di SQL Server.
Specificare un checksum dei dati
Per visualizzare la finestra di progettazione unit test di SQL Server, fare doppio clic sul file di codice sorgente dello unit test in Esplora soluzioni.
Dopo aver aggiunto una condizione di test di checksum dei dati allo unit test del database, devi configurare il checksum atteso usando la procedura seguente:
Inserire un valore di somma di controllo previsto
Nell'elenco delle condizioni di test selezionare la condizione di test Checksum dei dati per cui si vuole specificare un checksum.
Aprire la finestra Proprietà premendo F4. È anche possibile aprire il menu Visualizza e selezionare Finestra Proprietà .
(Facoltativo) È possibile modificare la proprietà (Name) della condizione di test in modo che sia più descrittiva.
Nella proprietà Configuration (Configurazione ) selezionare il pulsante Sfoglia (...).
Viene visualizzata la finestra di dialogo Configurazione per TestConditionName .
Specificare una connessione al database da testare. Per altre informazioni, vedere Procedura: Creare una connessione al database.
Per impostazione predefinita, il corpo Transact-SQL del test viene visualizzato nel riquadro di modifica. È possibile modificare il codice, se necessario, per produrre i risultati previsti. Ad esempio, se il test include codice nel pre-test, potrebbe essere necessario aggiungere tale codice.
Importante
Se si modifica una condizione di checksum per cui è stato specificato in precedenza un checksum, le modifiche apportate nel riquadro di modifica non vengono salvate. È necessario apportare di nuovo tali modifiche prima di selezionare Recupera.
Selezionare Recupera.
Il Transact-SQL viene eseguito sulla connessione di database specificata e i risultati vengono visualizzati nella finestra di dialogo.
Se i risultati corrispondono ai risultati previsti del test, selezionare OK. Altrimenti, modificare il corpo Transact-SQL e ripetere i passaggi 6, 7 e 8 finché i risultati non sono quelli attesi.
Nella colonna Valore della condizione di test viene visualizzato il valore del checksum previsto.
Specificare uno schema previsto
Dopo aver aggiunto una condizione di test dello schema previsto allo unit test di SQL Server, è necessario configurare lo schema previsto usando la procedura seguente:
Specificare lo schema previsto
Nell'elenco delle condizioni di test selezionare la condizione di test dello schema previsto per cui si vuole specificare uno schema.
Aprire la finestra Proprietà premendo F4. È anche possibile aprire il menu Visualizza e selezionare la finestra Proprietà .
(Facoltativo) È possibile modificare la proprietà (Name) della condizione di test in modo che sia più descrittiva.
Nella proprietà Configuration (Configurazione ) selezionare il pulsante Sfoglia (...).
Viene visualizzata la finestra di dialogo Configurazione per TestConditionName .
Specificare una connessione al database da testare. Per altre informazioni, vedere Procedura: Creare una connessione al database.
Per impostazione predefinita, il corpo Transact-SQL del test viene visualizzato nel riquadro di modifica. È possibile modificare il codice, se necessario, per produrre i risultati previsti. Ad esempio, se il test include codice nel pre-test, potrebbe essere necessario aggiungere tale codice.
Importante
Se si modifica una condizione di schema prevista per la quale è stato specificato in precedenza uno schema, le modifiche apportate nel riquadro di modifica non vengono salvate. È necessario apportare di nuovo tali modifiche prima di selezionare Recupera.
Selezionare Recupera.
Il Transact-SQL viene eseguito sulla connessione di database specificata e i risultati vengono visualizzati nella finestra di dialogo. Poiché si sta verificando lo schema o la forma del set di risultati e non i valori dei risultati, non è necessario visualizzare i dati nei risultati restituiti, purché le colonne appaiano nel modo previsto.
Se i risultati corrispondono ai risultati previsti del test, selezionare OK. Altrimenti, modificare il corpo Transact-SQL e ripetere i passaggi 6, 7 e 8 finché i risultati non sono quelli attesi.
Nella colonna Valore della condizione di test vengono visualizzate informazioni sullo schema previsto. Ad esempio, potrebbe indicare "Previsto: 2 tabelle".
Condizioni di test estendibili
Oltre alle sei condizioni di test predefinite, è possibile scrivere nuove condizioni di test personalizzate. Queste condizioni di test vengono visualizzate nel riquadro Condizioni di test della finestra di progettazione unit test di SQL Server. Per altre informazioni, vedere Condizioni di test personalizzate per unit test di SQL Server.