Condividi tramite


Risoluzione dei problemi relativi all'esecuzione dei test

Aggiornamento: novembre 2007

Se l'esecuzione di un test non viene eseguita correttamente, per analizzare il problema è possibile controllare l'ambiente del test che comprende il modo in cui il test è stato impostato e le impostazioni nella configurazione attiva dell'esecuzione dei test. In alcuni casi, ad esempio quelli relativi alla distribuzione, gli errori non dipendono dal tipo di test. In altri casi, è il tipo di test che determina il modo e gli elementi da analizzare. Per suggerimenti sull'analisi in base al tipo di test, vedere Dettagli in base al tipo di test.

Gli errori relativi ai test vengono riportati all'utente ad uno dei due seguenti livelli:

  • Errori al livello di test. Nella finestra dei risultati del test è possibile fare doppio clic oppure fare clic con il pulsante destro del mouse sul risultato del test e quindi scegliere Visualizza dettagli risultati test. Viene visualizzata la pagina [Dettagli] in cui sono contenuti i messaggi di errore e altri dettagli, in base al tipo di test, quali le informazioni sull'analisi dello stack per unit test. Un esempio di errore a livello di test è un errore di timeout del test che si verifica quando viene raggiunto il limite di timeout.

  • Errori al livello di esecuzione. Gli errori al livello di esecuzione, che includono gli errori della configurazione di esecuzione, sono riportati nella finestra Risultati test. Quando si verifica un errore a livello di esecuzione, sulla barra di stato della finestra Risultati test viene visualizzato un collegamento. Selezionando questo collegamento vengono visualizzati altri dettagli sull'errore nella pagina Esecuzione dei test [Dettagli]. È possibile visualizzare la pagina Esecuzione dei test [Dettagli] anche facendo clic su Dettagli esecuzione dalla barra degli strumenti della finestra Risultati test. Un esempio di errore a livello di esecuzione è un errore di timeout dell'esecuzione, che si verifica quando viene raggiunto il limite di timeout dell'esecuzione.

Non tutti i problemi impediscono la riuscita dell'esecuzione di un test. Dopo aver scelto di ottenere dati di code coverage, l'esecuzione di test può generare un avviso se al progetto sono associate determinate impostazioni di generazione. Per ulteriori informazioni, vedere Utilizzo dell'Impostazione di generazione AnyCPU quando si ottengono dati di code coverage.

Errori di distribuzione

Alcuni errori possono verificarsi per qualsiasi test eseguito automaticamente, vale a dire per qualsiasi tipo di test che non sia manuale. Questi errori sono spesso correlati alla distribuzione dei test. Quando un test viene distribuito, il file contenuto viene copiato in un'altra cartella, in un'ubicazione del computer locale oppure su un computer remoto. Per ulteriori informazioni, vedere Distribuzione dei test.

Per gli unit test, ad esempio, il file da distribuire è il file .dll creato dal progetto del test. Se questo file binario non può essere distribuito, tutti gli unit test contenuti in tale file vengono immediatamente contrassegnati come test non superati nella finestra Risultati test quando vengono eseguiti.

Per correggere questo errore, verificare che i file siano disponibili sul computer locale e che non si siano verificati errori di creazione durante l'ultima creazione dei file binari per il test.

È possibile distribuire anche file diversi dai file binari. È possibile specificare che un determinato file, come un file di dati, è obbligatorio per un test e deve quindi essere distribuito con il test. Durante la distribuzione, se questo file non viene individuato perché è stato spostato o eliminato, il test non può essere eseguito correttamente e si verifica un errore. Per informazioni su questo errore relativamente a test generici, vedere anche Dettagli in base al tipo di test.

Per analizzare questo errore, individuare innanzitutto i file e le cartelle specificati nella pagina di distribuzione della finestra di dialogo utilizzata per modificare le configurazioni di esecuzione dei test. Per ulteriori informazioni, vedere Procedura: specificare la configurazione di esecuzione di un test. Quindi, verificare che tali file e cartelle siano presenti sul disco e che i nomi siano identici.

Nella soluzione possono essere presenti più file di configurazione di esecuzione. In tal caso, analizzare la configurazione di esecuzione attiva quando si è verificato l'errore del test. Per individuare quale configurazione di esecuzione era attiva, esaminare la pagina Dettagli esecuzione test relativa all'esecuzione del test. Per ulteriori informazioni, vedere la sezione relativa alla pagina Dettagli esecuzione test in Report dei risultati di test generati.

Per ulteriori informazioni sui file della configurazione di esecuzione attiva, vedere Procedura: applicare la configurazione di esecuzione di un test.  

Errori nella visualizzazione dei risultati del test remoto

Quando si eseguono test in remoto, i risultati possono non essere visualizzati. Questo errore è probabilmente correlato alla natura remota dell'esecuzione del test.

Come i risultati delle esecuzioni locali dei test, anche i risultati delle esecuzioni remote vengono visualizzati in locale. La visualizzazione di determinati risultati di test remoti dipende dalla possibilità di Visual Studio Team System Test Edition di copiare nel computer locale i file dei risultati di test generati dal computer di test remoto.

Se vengono individuati errori nei risultati di test remoti, stabilire innanzitutto se il collegamento di rete tra il computer remoto e il computer su cui è in esecuzione Visual Studio è stato interrotto.

Per ulteriori informazioni, vedere Risoluzione dei problemi relativi a controller, agenti e rig.

Errori degli strumenti

Per poter visualizzare il code coverage, i file binari testati devono essere forniti di strumenti e distribuiti prima dell'esecuzione dei test.

Se gli strumenti per il file binario non vengono creati correttamente, il code coverage può non essere visualizzato. Una volta completata l'esecuzione del test, nella pagina Dettagli esecuzione test viene visualizzato un messaggio di errore in cui si specificano i motivi per i quali il code coverage non può essere visualizzato.

Le cause possibili di un errore per la strumentazione sul posto di un file binario sono l'opzione di sola lettura attivata o l'utilizzo del file da parte di un altro processo. Per correggere l'errore di un file binario di sola lettura, esaminare innanzitutto gli attributi di tale file per assicurarsi di poter scrivere nel file. Per sapere quale file binario controllare, aprire la pagina Code Coverage della configurazione di esecuzione attiva; in tale pagina è possibile specificare i file per cui creare gli strumenti. Per ulteriori informazioni, vedere Procedura: ottenere dati di code coverage.

Un'altra causa di errore di code coverage quando si utilizza la strumentazione sul posto può essere l'utilizzo di uno o più unit test insieme a un test manuale. Durante il test manuale, il tester esegue il codice di produzione da testare. Se il tester preme il tasto F5 o CTRL+F5 per avviare il debug del codice, il file eseguibile del progetto viene creato nuovamente e gli strumenti vengono eliminati.

Assicurarsi inoltre che nessun altro processo stia utilizzando il file binario. Verificare, ad esempio, che il file non sia aperto in un'altra istanza di Visual Studio.

Durante la strumentazione di un Assembly con nomi sicuri, è possibile rilevare altri errori relativi alla ripetizione della firma dell'assembly. Per ulteriori informazioni, vedere Strumentazione e ripetizione della firma di assembly.

Chiusura dei risultati dei test per migliorare le prestazioni

Per migliorare le prestazioni di Visual Studio, chiudere i risultati dei test precedenti.

Quando si eseguono test, Visual Studio archivia in memoria le esecuzioni e i risultati dei test. Man mano che si accumulano le esecuzioni e i risultati dei test, viene allocata una maggiore quantità di memoria. Per liberare la memoria dalle esecuzioni dei test, fare clic su Chiudi risultati dalla barra degli strumenti della finestra Risultati test. In questo modo vengono rilasciati gli oggetti dei risultati dei test ma non viene chiamato in modo esplicito il Garbage Collector. Ciò significa che la memoria diventerà disponibile, ma non necessariamente subito.

È anche possibile impostare il numero massimo di esecuzioni di test da conservare in memoria. Per ulteriori informazioni, vedere Procedura: limitare il numero delle esecuzioni dei test memorizzate.

Utilizzo dell'Impostazione di generazione AnyCPU quando si ottengono dati di code coverage

È possibile ottenere dati di code coverage solo quando si testa codice negli assembly a 32 bit. Per garantire questa condizione, impostare una particolare proprietà di generazione:

Nota:

Questo avviso non si applica ai progetti C++ perché AnyCPU non è un'opzione di piattaforma per questo tipo di progetti.

Se si genera il progetto con il valore AnyCPU, i test eseguiti sull'assembly risultante producono dati di code coverage, ma generano anche un avviso. È possibile visualizzare il testo dell'avviso nella pagina Dettagli esecuzione dei test:

Warning VSP2013 : Instrumenting this image requires it to run as a 32-bit process.  The CLR header flags have been updated to reflect this.

Questo avviso indica che l'assembly è stato ricompilato con la proprietà x86 applicata allo scopo di ottenere dati di code coverage durante l'esecuzione del test. Per evitare questo avviso, compilare gli assembly per cui si desiderano i dati di code coverage con l'impostazione x86.

Nota:

Se l'applicazione è stata progettata per essere eseguita in computer a 32 e a 64 bit, ricompilarla utilizzando l'impostazione AnyCPU al termine del test.

L'esecuzione di unit test può bloccare un assembly di test C++/CLI

Potrebbe verificarsi una situazione in cui il motore di esecuzione dei test apre e blocca un assembly del progetto di test. In questi casi, non è possibile, ad esempio, salvare le modifiche nell'assembly. Questo problema potrebbe verificarsi nelle seguenti situazioni:

  • Caso 1: è stata disattivata la distribuzione per il progetto di test, TestProjectA. TestProjectA è stato compilato in C++/CLI. Il codice all'interno di TestProjectA definisce una classe Attribute e tale attributo decora almeno uno dei metodi di test di TestProjectA. In questa fase, quando si eseguono unit test in TestProjectA, il motore di esecuzione dei test apre TestProjectA.DLL e può lasciarlo in uno stato di blocco.

  • Caso 2: il progetto di test, TestProject1, contiene una DLL compilata da un secondo progetto di test, TestProject2. TestProject2 è stato compilato in C++/CLI. Il codice all'interno di TestProject2 definisce una classe Attribute e tale attributo decora almeno uno dei metodi di test di TestProject2. In questo caso, quando si eseguono unit test in TestProject1, il motore di esecuzione dei test apre TestProject2.DLL e può lasciarlo in una stato di blocco.

In entrambi questi casi, la soluzione potrebbe consistere di due parti. Innanzitutto, attenersi alla procedura descritta di seguito.

  1. Scegliere Opzioni dal menu Strumenti.

    Verrà visualizzata la finestra di dialogo Opzioni.

  2. Espandere Strumenti di test e fare clic su Esecuzione dei test.

  3. In Prestazioni deselezionare la casella di controllo per Mantieni il motore in esecuzione tra le esecuzioni dei test.

Se, dopo avere completato questa procedura, il problema persiste, effettuare la seguente operazione:

Modificare il codice in modo che non sia necessario caricare il progetto di test compilato in C++/CLI nell'AppDomain predefinito. A tale scopo, è possibile spostare le definizioni degli attributi personalizzati utilizzati in un assembly distinto implementato in C#.

Dettagli in base al tipo di test

Alcuni errori si verificano spesso o soprattutto quando si eseguono determinati tipi di test, come descritto in questa sezione.

  • Test manuali. I test manuali non possono essere eseguiti in remoto. Quando si tenta di avviare un'esecuzione dei test in cui è compreso un test manuale, in Test Edition viene tentata la rimozione di un test manuale dall'esecuzione dei test. In questi casi, viene visualizzato un messaggio di avviso e viene fornita la possibilità scegliere se annullare l'esecuzione dei test o proseguire senza eseguire il test manuale. Per ulteriori informazioni, vedere Finestre di dialogo di Test Edition.

  • Test ordinati. Gli errori che si verificano con i test ordinati spesso coinvolgono la distribuzione del file. Prima che possa essere eseguito nel modulo del test, è necessario che vengano individuati e quindi eseguiti tutti i file relativi a tutti i test inclusi, oltre a tutti gli altri file obbligatori. Se non si eseguono queste operazioni per ciascun test, si verifica un errore.

  • Test generici. Gli errori di distribuzione possono verificarsi anche durante l'esecuzione dei test generici. È possibile specificare i file da distribuire in due modi per i test generici: dalla pagina di distribuzione della configurazione dell'esecuzione dei test e dalla pagina di modifica del test generico. Il test può avere esito negativo se non si elencano tutti i file obbligatori oppure se in Strumenti di test Team System non vengono individuati i file nelle ubicazioni specificate.

    Questi due diversi modi di distribuire i file determinano la visualizzazione degli errori a diversi livelli. Se l'errore di distribuzione si riferisce a un file specificato nella pagina di modifica del test generico, l'errore sarà riportato al livello del test. Se l'errore di distribuzione si riferisce a un file specificato nella configurazione di esecuzione, l'errore sarà riportato al livello dell'esecuzione.

Vedere anche

Attività

Procedura: impostare limiti di tempo per l'esecuzione di test

Concetti

Finestre di dialogo di Test Edition

Report dei risultati di test generati

Strumentazione e ripetizione della firma di assembly

Unit test e C++

Altre risorse

Distribuzione dei test

Configurazione dell'esecuzione del test