Procedura; forzare l'arresto dell'esecuzione di test dopo un periodo di tempo specificato
È 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:
Setting Time-Out period for All Tests: 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 Specifica delle impostazioni test di Visual Studio.
Override the Per-Test Time-Out Value on Individual test: È 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.
Impostare il periodo di timeout per tutti i test
Impostare il valore di timeout del test per tutti i test utilizzando il file di impostazioni di test
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.
Scegliere Timeout dei 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.
Scegliere Salva, quindi scegliere Chiudi.
Per rendere effettiva questa impostazione, le impostazioni di test modificate devono essere quelle attive.Per ulteriori informazioni, vedere Procedura: selezionare le impostazioni test attive da Microsoft Visual Studio.
Eseguire l'override del valore di timeout per singolo test sul singolo test
Per impostare il timeout per singolo test utilizzando un attributo di uno unit test
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.
Vedere anche
Attività
Procedura: selezionare le impostazioni test attive da Microsoft Visual Studio