Condividi tramite


Utilizzo di asserzioni Transact-SQL in unit test di SQL Server

 

In uno unit test di SQL Server viene eseguito uno script di test Transact-SQL e viene restituito un risultato.Talvolta, i risultati vengono restituiti come set di risultati.È possibile convalidare i risultati utilizzando le condizioni di test.È ad esempio possibile utilizzare una condizione di test per controllare il numero di righe restituite in un determinato set di risultati o per verificare il tempo necessario per l'esecuzione di un test specifico.Per ulteriori informazioni sulle condizioni di test, vedere Utilizzo di condizioni di test in unit test di SQL Server.

Anziché utilizzare le condizioni di test, è possibile utilizzare anche asserzioni Transact-SQL, vale a dire le istruzioni THROW e RAISERROR in uno script Transact-SQL.In determinate circostanze, è preferibile utilizzare un'asserzione Transact-SQL anziché una condizione di test.

Utilizzo di asserzioni Transact-SQL

Prima di decidere di convalidare i dati utilizzando asserzioni Transact-SQL o condizioni di test, è consigliabile fare le seguenti considerazioni.

  • Prestazioni.È più rapido eseguire un'asserzione Transact-SQL nel server anziché spostare prima i dati in un computer client e quindi manipolarli localmente.

  • Familiarità con il linguaggio.È possibile che si preferisca utilizzare un particolare linguaggio in base alla propria esperienza e che quindi si scelgano le asserzioni Transact-SQL oppure le condizione di test Visual C# o Visual Basic.

  • Complessità della convalida.In alcuni casi, è possibile compilare test più complessi in Visual C# o in Visual Basic e convalidare i test nel client.

  • Semplicità.Spesso è più semplice utilizzare una condizione di test predefinita anziché scrivere lo script equivalente in Transact-SQL.

  • Librerie di convalida legacy.Se è già presente del codice per l'esecuzione della convalida, è possibile utilizzarlo in uno unit test di SQL Server anziché utilizzare condizioni di test.

Contrassegnare metodi di unit test con l'eccezione prevista

Per contrassegnare un metodo di unit test di SQL Server con le eccezioni previste, aggiungere l'attributo seguente:

<ExpectedSqlException(MessageNumber=nnnnn, Severity=x, MatchFirstError=false, State=y)> _
[ExpectedSqlException(MessageNumber=nnnnn, Severity=x, MatchFirstError=false, State=y)]

Dove:

  • nnnnn è il numero del messaggio previsto, ad esempio 14025

  • x è il livello di gravità dell'eccezione prevista

  • y è lo stato dell'eccezione prevista.

Tutti i parametri non specificati vengono ignorati.Passare questi parametri all'istruzione RAISERROR nel codice di database.Se si specifica MatchFirstError = true, l'attributo corrisponderà a uno qualsiasi dei valori SqlErrors nell'eccezione.Il comportamento predefinito (MatchFirstError = true) troverà una corrispondenza solo per il primo errore che si verifica.

Per un esempio di utilizzo delle eccezioni previste e di uno unit test di SQL Server negativo, vedere Procedura dettagliata: Creazione ed esecuzione di uno unit test di SQL Server.

Istruzione RAISERROR

Nota

Utilizzare THROW anziché RAISERROR.RAISERROR è deprecata.

È possibile utilizzare direttamente asserzioni Transact-SQL nel server utilizzando l'istruzione RAISERROR nello script Transact-SQL.La relativa sintassi è la seguente:

**RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)**

dove:

@ErrorMessage è un messaggio di errore definito dall'utente.È possibile formattare questa stringa di messaggio in modo simile alla funzione printf_s.

@ErrorSeverity è un livello di gravità definito dall'utente compreso tra 0 e 18.

Nota

I valori '0' e '10' per il livello di gravità non causano l'esito negativo dello unit test di SQL Server.È possibile utilizzare qualsiasi altro valore nell'intervallo compreso tra 0 e 18 per causare l'esito negativo del test.

@ErrorState è un numero intero arbitrario compreso tra 1 e 127.È possibile utilizzare questo numero intero per differenziare le occorrenze di un singolo errore generato in punti diversi del codice.

Per ulteriori informazioni, vedere RAISERROR (Transact-SQL).Un esempio di utilizzo di RAISERROR in uno unit test di SQL Server è fornito nell'argomento Procedura: Scrivere uno unit test di SQL Server in esecuzione nell'ambito di una singola transazione.

Vedere anche

Creazione e definizione di unit test di SQL Server
Utilizzo di condizioni di test in unit test di SQL Server
Verifica del codice di database tramite unit test di SQL Server
Procedura: Aprire uno unit test di SQL Server per la modifica