Condividi tramite


Utilizzo di asserzioni Transact-SQL in unit test del database

In uno unit test del database viene eseguito uno script di test Transact-SQL e viene restituito un risultato. I risultati vengono talvolta restituiti come gruppo di risultati. È possibile convalidare i risultati utilizzando condizioni di test. È ad esempio possibile utilizzare una condizione di test per controllare il numero di righe restituite in un determinato gruppo 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 negli unit test del database.

Anziché utilizzare condizioni di test, è possibile utilizzare asserzioni Transact-SQL, ovvero istruzioni 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 se utilizzare asserzioni Transact-SQL o condizioni di test per convalidare i dati, è consigliabile considerare gli aspetti illustrati di seguito.

  • Prestazioni. L'esecuzione di un'asserzione Transact-SQL sul server è più rapida dello spostamento dei dati in un computer client per poi agirvi localmente.

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

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

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

Contrassegnare i metodi unit test con l'eccezione prevista

Per contrassegnare un metodo dello unit test del database con 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 rappresenta la gravità dell'eccezione prevista

  • y rappresenta lo stato dell'eccezione prevista

Qualsiasi parametro non specificato viene ignorato. Tali parametri vengono passati all'istruzione RAISERROR nel codice del database. Se si specifica MatchFirstError = true, l'attributo corrisponderà a qualsiasi SqlError nell'eccezione. Il comportamento predefinito (MatchFirstError = true) può corrispondere solo al primo errore che si verifica.

Per un esempio di come utilizzare eccezioni previste e uno unit test del database negativo, vedere Procedura dettagliata: creazione ed esecuzione di uno unit test del database.

Istruzione RAISERROR

È possibile utilizzare direttamente asserzioni Transact-SQL nel server utilizzando l'istruzione RAISERROR nello script Transact-SQL. La sintassi di questa istruzione è 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 del database. È possibile utilizzare qualsiasi altro valore nell'intervallo compreso tra 0 e 18 per causare l'esito negativo del test.

@ErrorState è un Integer arbitrario compreso tra 1 e 127. È possibile utilizzare questo Integer per distinguere le occorrenze di un singolo errore generato in diverse posizioni nel codice.

Per ulteriori informazioni, vedere RAISERROR (Transact-SQL) nella raccolta di documentazione online del sito Web Microsoft. Un esempio di utilizzo di RAISERROR in uno unit test del database è fornito nell'argomento Procedura: scrivere uno unit test del database da eseguire nell'ambito di una singola transazione.

Vedere anche

Attività

Procedura: aprire uno unit test del database da modificare

Concetti

Utilizzo di condizioni di test negli unit test del database

Verifica del codice del database tramite unit test