Utilizzo di condizioni di test negli unit test del database
In uno unit test del database tipico viene eseguito uno script di test Transact-SQL e viene restituita un'istanza della classe ExecutionResult. L'istanza di questa classe contiene un DataSet, l'ora di esecuzione e le righe influenzate dallo script. Tutte queste informazioni vengono raccolte durante l'esecuzione dello script. I risultati possono essere valutati all'interno dello script Transact-SQL tramite la funzione RAISERROR oppure utilizzando condizioni di test. Visual Studio Premium offre un set di condizioni di test predefinite da utilizzare.
Condizioni di test predefinite
Nella tabella seguente vengono elencate le condizioni di test predefinite che è possibile aggiungere tramite il riquadro Condizioni di test nella finestra di progettazione unit test del database.
Condizione di test |
Descrizione della condizione di test |
---|---|
Checksum dei dati |
Non riesce se il checksum del set di risultati restituito dallo script Transact-SQL non corrisponde al checksum previsto. Per ulteriori informazioni, vedere Impostazione di un checksum dei dati.
Nota
Questa condizione di test non è consigliata se si restituiscono dati soggetti a modifiche tra successive esecuzioni dei test.Se ad esempio il set di risultati contiene date o orari generati oppure colonne di identità, i test avranno esito negativo poiché il checksum risulterà diverso a ogni esecuzione.
|
Gruppo di risultati vuoto |
Ha esito negativo se il set di risultati restituito dallo script Transact-SQL non è vuoto. |
Ora di esecuzione |
Ha esito negativo se l'esecuzione dello script di test Transact-SQL richiede più tempo del previsto. Il tempo di esecuzione predefinito è 30 secondi. Il tempo di esecuzione si applica esclusivamente allo script di test, non allo script di pre-test o a quello di 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 ulteriori informazioni, vedere Impostazione di uno schema previsto. |
Senza risultati |
Produce sempre un test senza risultati. Si tratta della condizione predefinita aggiunta a ogni test. Questa condizione di test viene inclusa per indicare che la verifica del test non è stata implementata. Eliminare questa condizione dal test dopo averne aggiunto altre. |
Gruppo di risultati non vuoto |
Ha esito negativo se il gruppo di risultati è vuoto. È possibile utilizzare questa condizione oppure EmptyResultSet con la funzione Transact-SQL @@RAISERROR nello script di test per testare il corretto funzionamento di un aggiornamento. È possibile, ad esempio, salvare valori di pre-aggiornamento, eseguire l'aggiornamento, confrontare i valori di post-aggiornamento e generare un errore nel caso non si ottengano i risultati previsti. |
Conteggio righe |
Ha esito negativo se il gruppo di risultati non contiene il numero di righe previsto. |
Valore scalare |
Ha esito negativo se un determinato valore nel gruppo di risultati non è uguale al valore specificato. Il valore predefinito di Valore previsto è null. |
Nota
La condizione di test relativa al tempo di esecuzione specifica un limite di tempo entro il quale deve essere eseguito lo script di test Transact-SQL. Se questo limite di tempo viene superato, il test ha esito negativo. I risultati del test includono anche una statistica di durata, diversa dalla condizione di test Ora di esecuzione. La statistica di durata non include solo il tempo di esecuzione, ma anche il tempo necessario per connettersi due volte al database, per eseguire tutti gli altri script di test, ad esempio lo script di pre-test e quello di post-test e per eseguire le condizioni di test. Di conseguenza, un test può essere superato anche se la relativa durata è superiore al tempo di esecuzione.
La durata segnalata non include il tempo utilizzato per la generazione di dati e per la distribuzione dello schema, poiché queste operazioni vengono eseguite prima dell'esecuzione dei test. Per visualizzare la durata del test, selezionare un test eseguito nella finestra Risultati test, fare clic su di esso con il pulsante destro del mouse e quindi scegliere Visualizza dettagli risultati test.
È possibile aggiungere condizioni di test agli unit test del database tramite il riquadro Condizioni di test della finestra di progettazione unit test del database. Per ulteriori informazioni, vedere Procedura: aggiungere condizioni di test a unit test del database.
È anche possibile modificare direttamente il codice con metodo di test per aggiungere più funzionalità. Per ulteriori informazioni, vedere Procedura: aprire uno unit test del database da modificare e Procedura: scrivere uno unit test del database da eseguire nell'ambito di una singola transazione. È possibile, ad esempio, aggiungere funzionalità a un metodo di test aggiungendo istruzioni di asserzione. Per ulteriori informazioni, vedere Utilizzo di asserzioni Transact-SQL in unit test del database.
Errori previsti
È possibile creare unit test del database per testare i comportamenti che devono avere esito negativo. Questi errori previsti sono talvolta noti come test negativi. Alcuni esempi comuni includono quanto segue:
Verificare che una stored procedure che elimina i dati di un cliente abbia esito positivo se si specifica un ID cliente non valido
Verificare che una stored procedure che compila un ordine abbia esito negativo se l'ordine non viene eseguito oppure è già compilato
Verificare che una stored procedure che annulla un ordine non possa annullare ordini completati o già annullati
È possibile definire unit test del database per stored procedure che generano eccezioni SQL previste. È possibile aggiungere un attributo al metodo dello unit test per indicare una o più eccezioni previste. In questo modo è possibile evitare che il test abbia esito negativo in caso si verifichi una 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)]
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 = false, 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.
Impostazione di un checksum dei dati
Dopo avere aggiunto una condizione di test relativa al checksum dei dati allo unit test del database, è necessario configurare il checksum previsto tramite la procedura seguente:
Per specificare un checksum previsto
Nell'elenco delle condizioni di test fare clic sulla condizione di test relativa al checksum dei dati per la quale si desidera specificare un checksum.
Aprire la finestra Proprietà premendo F4. È inoltre possibile scegliere Proprietà dal menu Visualizza.
(Facoltativo) Potrebbe risultare opportuno modificare la proprietà (Nome) della condizione di test in modo che sia più descrittiva.
Nella proprietà Configurazione fare clic sul pulsante con i puntini di sospensione (…).
Verrà visualizzata la finestra di dialogo Configurazione per NomeCondizioneTest.
Specificare una connessione al database che si desidera testare. Per ulteriori 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. Se ad esempio il test dispone di codice nel test preliminare, potrebbe essere necessario aggiungere tale codice.
Importante Se si modifica una condizione di checksum per la quale era già stato specificato un checksum, le modifiche apportate nel riquadro di modifica non verranno salvate. È necessario apportare di nuovo tali modifiche prima di fare clic su Recupera.
Fare clic su Recupera.
Il codice Transact-SQL viene eseguito sulla connessione al database specificata e i risultati vengono visualizzati nella finestra di dialogo.
Se i risultati corrispondono ai risultati previsti del test, fare clic su OK. In caso contrario, modificare il corpo Transact-SQL e ripetere i passaggi 6, 7 e 8 finché non si ottengono i risultati previsti.
La colonna Valore della condizione di test indica il valore del checksum previsto.
Impostazione di uno schema previsto
Dopo avere aggiunto una condizione di test relativa allo schema previsto allo unit test del database, è necessario configurare lo schema previsto tramite la procedura seguente:
Per specificare uno schema previsto
Nell'elenco delle condizioni di test fare clic sulla condizione di test relativa allo schema previsto per la quale si desidera specificare uno schema.
Aprire la finestra Proprietà premendo F4. È inoltre possibile scegliere Proprietà dal menu Visualizza.
(Facoltativo) Potrebbe risultare opportuno modificare la proprietà (Nome) della condizione di test in modo che sia più descrittiva.
Nella proprietà Configurazione fare clic sul pulsante con i puntini di sospensione (…).
Verrà visualizzata la finestra di dialogo Configurazione per NomeCondizioneTest.
Specificare una connessione al database che si desidera testare. Per ulteriori 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. Se ad esempio il test dispone di codice nel test preliminare, potrebbe essere necessario aggiungere tale codice.
Importante Se si modifica una condizione di schema previsto per la quale era già stato specificato uno schema, le modifiche apportate nel riquadro di modifica non verranno salvate. È necessario apportare di nuovo tali modifiche prima di fare clic su Recupera.
Fare clic su Recupera.
Il codice Transact-SQL viene eseguito sulla connessione al database specificata e i risultati vengono visualizzati nella finestra di dialogo. Poiché si verifica lo schema, o forma, del set di risultati e non i valori dei risultati, non è necessario esaminare eventuali dati nei risultati restituiti a condizione che le colonne risultino quelle previste.
Se i risultati corrispondono ai risultati previsti del test, fare clic su OK. In caso contrario, modificare il corpo Transact-SQL e ripetere i passaggi 6, 7 e 8 finché non si ottengono i risultati previsti.
La colonna Valore della condizione di test contiene informazioni sullo schema previsto. Potrebbe ad esempio 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 del database. Per ulteriori informazioni, vedere Procedura: creare condizioni di test per la finestra di progettazione degli unit test del database.
Vedere anche
Concetti
Utilizzo di asserzioni Transact-SQL in unit test del database