Condividi tramite


Risoluzione dei problemi relativi all'esecuzione dei test

Se l'esecuzione di un test non riesce, è possibile analizzare il problema controllando l'ambiente di test, ovvero analizzando la configurazione del test e le impostazioni di test attive. 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 sulla traccia 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 a livello di esecuzione, che includono gli errori delle impostazioni di test, 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 compilazione. Per ulteriori informazioni, vedere Utilizzo dell'Impostazione di compilazione 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 gli unit test, ad esempio, il file da distribuire è il file dll compilato dal progetto di 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 compilazione durante l'ultima ricompilazione 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 Distribuzione della finestra di dialogo utilizzata per modificare le impostazioni di test. Per ulteriori informazioni, vedere Creazione di impostazioni di test per l'esecuzione di test automatizzati da Visual Studio. 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 impostazioni di test. In tal caso, analizzare le impostazioni di test attive quando si è verificato l'errore. Per individuare le impostazioni di test attive, esaminare la pagina dei dettagli dell'esecuzione dei test in questione.

Per ulteriori informazioni sulle impostazioni di test attive, vedere Procedura: applicare le impostazioni test da Microsoft Visual Studio.

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 Ultimate 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 Configurazione di computer di test per l'esecuzione di test o la raccolta di dati.

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. Al termine dell'esecuzione dei test, nella pagina dei dettagli verrà visualizzato un messaggio di errore indicante che 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 individuare i file binari da controllare, aprire la pagina Code Coverage delle impostazioni di test attive; in tale pagina vengono specificati i file per la strumentazione. 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 ricompilato 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.

Utilizzo dell'Impostazione di compilazione 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 compilazione:

Nota

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

Se si compila 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:

Avviso VSP2013: La strumentazione di questa immagine ne richiede l'esecuzione come processo a 32 bit. I flag dell'intestazione CLR sono stati aggiornati di conseguenza.

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 disabilitata 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 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. È possibile che il test non venga superato se non si elencano tutti i file obbligatori oppure se è impossibile trovare i file nei percorsi specificati.

    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 nelle impostazioni di test, l'errore sarà riportato al livello dell'esecuzione.

Vedere anche

Attività

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

Concetti

Strumentazione e ripetizione della firma di assembly

Revisione dei risultati dei test