Procedura: impostare limiti di tempo per l'esecuzione di test
È possibile impostare limiti di tempo per l'esecuzione di un test o per un'esecuzione dei test. Questa operazione può essere utile, ad esempio, in un laboratorio di esecuzione test in cui sia necessario completare alcuni test entro una determinata ora del giorno.
Un altro scenario in cui utilizzare i limiti di tempo è quello in cui il codice non risponde. Se in un test una sezione di codice non risponde, l'utilizzo del timeout del test e del timeout dell'esecuzione dei test consente di terminare il singolo test in modo che l'esecuzione prosegua con i test successivi.
È possibile impostare limiti di tempo in due modi:
I valori di timeout per i test e per le esecuzioni dei test possono essere impostati nelle impostazioni di test. Per ulteriori informazioni sulle impostazioni di test, vedere Creazione di impostazioni di test per l'esecuzione di test automatizzati da Visual Studio.
È possibile sovrascrivere il valore di timeout per il singolo test impostando una proprietà in un singolo test. Non è possibile sovrascrivere il valore di timeout dell'esecuzione dei test.
Non è possibile impostare il timeout del test per specifici tipi di test. I timeout del test non si applicano ai test manuali ma i timeout per le esecuzioni dei test sono sempre attivi, anche per le esecuzioni dei test che contengono test manuali.
L'impostazioni di limiti di tempo per test ed esecuzioni dei test produce i seguenti effetti:
Quando la durata di un'esecuzione dei test raggiunge il valore di timeout, l'esecuzione dei test viene interrotta, anche se non sono stati eseguiti tutti i test.
Quando la durata di un singolo test raggiunge il valore di timeout, l'esecuzione viene interrotta e il test viene contrassegnato con Timeout. L'esecuzione dei test continua con il test successivo.
Come i metodi di inizializzazione influiscono sui timeout dei test
Un processo di esecuzione dei test può includere il metodo AssemblyInitializeAttribute e il metodo ClassInitializeAttribute. Se tali metodi sono definiti, verranno completati in una quantità determinata di tempo, dopodiché il primo test nell'esecuzione dei test verrà avviato.
La quantità di tempo richiesta dai metodi di inizializzazione viene aggiunta alla quantità di tempo utilizzata dal primo test. Il concetto può essere espresso in una formula con i seguenti termini:
Dt = durata totale
Dr = tempo di esecuzione di un test
I = metodi di inizializzazione dell'assembly e della classe
Tn = test in esecuzione in posizione casuale all'interno di un'esecuzione dei test
T1 = test in esecuzione in prima posizione all'interno di un'esecuzione dei test
Quanto segue è applicabile a tutti i test successivi al primo:
Dt**[Tn] = Dr[Tn]**
Notare tuttavia il caso seguente:
Dt**[T1] = Dr[T1] + D[I]**
Al primo test eseguito potrebbe essere assegnato un valore di timeout singolo. In tal caso, il tempo di inizializzazione viene considerato nel calcolo del limite di tempo imposto al primo test e potrebbe pertanto causare la mancata riuscita del test.
Nota
Tale limitazione potrebbe causare la mancata riuscita solo del primo test. Non vi saranno conseguenze per i test successivi.
Se l'esecuzione dei test include dei metodi di inizializzazione, è possibile aggirare tale limitazione applicando a ogni test un timeout maggiore della somma dei tempi di esecuzione previsti per il metodo di test e i metodi di inizializzazione. Tale operazione dovrebbe essere effettuata per ogni test. Poiché l'esecuzione di unit test non garantisce l'ordine in cui i test vengono eseguiti, non è possibile prevedere quale test verrà eseguito per primo.
Come i metodi di pulitura influiscono sui timeout delle esecuzioni dei test
Un processo di esecuzione dei test può includere il metodo AssemblyCleanupAttribute e il metodo ClassCleanupAttribute. Una volta completati tali metodi, l'esecuzione dei test termina.
È possibile che all'esecuzione dei test sia assegnato un valore di timeout. La quantità di tempo utilizzata dai metodi di pulitura viene aggiunta alla quantità totale di tempo necessario all'esecuzione dei test. In altre parole, il tempo di pulitura viene considerato nel calcolo del limite di tempo imposto all'esecuzione dei test totale e potrebbe pertanto causare il timeout di tale esecuzione.
Aprire Esplora soluzioni.
Nelle cartella Elementi di soluzione della soluzione, fare doppio clic sul file delle impostazioni di test.
Verrà visualizzata la finestra di dialogo Impostazioni di configurazione.
Fare clic su Timeout test.
Selezionare Interrompi esecuzione dei test se il tempo di esecuzione totale è maggiore di:
Impostare il valore di timeout dell'esecuzione dei test in ore, minuti e secondi.
Fare clic su Salva, quindi su Chiudi.
Per rendere effettiva questa impostazione, le impostazioni di test modificate devono essere quelle attive. Per ulteriori informazioni, vedere Procedura: applicare le impostazioni test da Microsoft Visual Studio.
Aprire Esplora soluzioni.
Nelle cartella Elementi di soluzione della soluzione, fare doppio clic sul file delle impostazioni di test.
Verrà visualizzata la finestra di dialogo Impostazioni test.
Fare clic su Timeout test.
Selezionare Contrassegna singolo test come non superato se il tempo di esecuzione è maggiore di:
Impostare il valore di timeout per il singolo test in ore, minuti e secondi.
Fare clic su Salva, quindi su Chiudi.
Per rendere effettiva questa impostazione, le impostazioni di test modificate devono essere quelle attive. Per ulteriori informazioni, vedere Procedura: applicare le impostazioni test da Microsoft Visual Studio.
Aprire l'Editor elenco dei test o la finestra Visualizzazione test.
Fare clic sul test e premere F4.
Verrà visualizzata la finestra Proprietà contenente le proprietà per quel test.
Per la proprietà Timeout, impostare il valore in ore, minuti e secondi.
Nota
Il valore di timeout per un test manuale è infinito. Questo valore non può essere modificato.
Solo per questo test, il valore impostato eseguirà l'override del valore di timeout per singolo test configurato nelle impostazioni di test. Il valore di timeout per l'esecuzione dei test non viene alterato.
Aprire il file del codice sorgente di uno unit test.
Individuare l'attributo TestMethod del test.
Aggiungere l'attributo Timeout e un parametro che esprima il valore di timeout.
Il valore di timeout viene espresso in millisecondi.
Esempio in Visual C#:
[TestMethod(), Timeout(80)] public void MyTestMethod() { // test code }
Esempio in Microsoft Visual Basic:
<TestMethod(), Timeout(80)> _ Public Sub MyTestMethod() ' test code End Sub
Solo per questo test, il valore impostato eseguirà l'override del valore di timeout per singolo test configurato nelle impostazioni di test. Il valore di timeout per l'esecuzione dei test non viene alterato.
Procedura: applicare le impostazioni test da Microsoft Visual Studio