Risolvere i problemi di code coverage
Si applica a: Visual Studio
Lo strumento di analisi della copertura del codice in Visual Studio raccoglie dati per assembly nativo e gestito (file con estensione dll o exe). Tuttavia, in alcuni casi, nella finestra Risultati code coverage viene visualizzato un errore simile a "Risultati vuoti generati: ....". Questo articolo consente di risolvere i problemi e risolvere i vari motivi per cui è possibile riscontrare risultati vuoti.
Cosa dovresti vedere?
Se si sceglie un comando Analizza code coverage dal menu Test e se la compilazione e i test vengono eseguiti correttamente, nella finestra Code coverage verrà visualizzato un elenco di risultati. Potrebbe essere necessario espandere gli elementi per visualizzare il dettaglio.
Per altre informazioni, vedere Usare la funzionalità code coverage per determinare la quantità di codice testato.
Cause possibili per la restituzione di nessun risultato o di risultati obsoleti
Non si usa l'edizione corretta di Visual Studio
È necessario Visual Studio Enterprise.
Nessun test è stato eseguito
Analisi
Verificare la finestra di output. Nell'elenco a discesa Mostra output di scegliere Test. Verificare se sono presenti avvisi o errori registrati.
Spiegazione
L'analisi del code coverage viene effettuata mentre i test sono in esecuzione. Include solo gli assembly caricati in memoria quando i test vengono eseguiti. Se nessun test viene eseguito, il code coverage non ha nulla da riportare.
Risoluzione
In Esplora test selezionare Esegui tutto per verificare che i test vengano eseguiti correttamente. Correggere eventuali errori prima di usare l'opzione Analizza code coverage.
È visualizzato un risultato precedente
Quando si modificano e si rieseguono i test, i risultati di un code coverage precedente possono rimanere visibili, inclusa la colorazione del codice dell'esecuzione precedente. Per risolvere il problema, seguire questa procedura:
- Eseguire Analizza code coverage.
- Verificare che sia stato selezionato il set di risultati più recente nella finestra Risultati code coverage.
I file con estensione pdb (simbolo) non sono disponibili
Analisi
Aprire la cartella di destinazione di compilazione (in genere bin\debug) e verificare che per ogni assembly sia presente un file con estensione pdb nella stessa directory del file .dll o .exe .
Spiegazione
Il motore di code coverage richiede che ogni assembly disponga del file con estensione pdb associato accessibile durante l'esecuzione del test. Se non è presente alcun file con estensione pdb per un assembly specifico, l'assembly non viene analizzato.
Il file con estensione pdb deve essere generato dalla stessa compilazione dei file con estensione dll o exe.
Risoluzione
Assicurarsi che le impostazioni di compilazione generino il file con estensione pdb .
Se i file con estensione pdb non vengono aggiornati al momento della compilazione del progetto, aprire le proprietà del progetto, selezionare la pagina Compila , scegliere Avanzate ed esaminare Informazioni di debug.
In Visual Studio 2022 e versioni successive, per i progetti C# destinati a .NET Core o .NET 5+, aprire le proprietà del progetto, selezionare la scheda Compila , scegliere Generale ed esaminare i simboli di debug.
Per i progetti C++, assicurarsi che i file con estensione pdb generati dispongano di informazioni di debug complete. Aprire le proprietà del progetto e verificare che Il debug del linker Genera informazioni di debug sia impostato su Genera informazioni di debug ottimizzate per la condivisione e la pubblicazione (/DEBUG:FULL).Open the project properties and verify that Linker>Debugging>Generate Debug Info is set to Generate Debug Information optimized for sharing and publishing (/DEBUG:FULL).
Se i file con estensione pdb e dll o exe sono in posizioni diverse, copiare il file con estensione pdb nella stessa directory. È anche possibile configurare il motore di code coverage per cercare i file con estensione pdb in un'altra posizione. Per altre informazioni, vedere Personalizzare l'analisi code coverage.
Viene usato un file binario instrumentato o ottimizzato
Analisi
Determinare se il file binario è stato sottoposto a qualsiasi forma di ottimizzazione avanzata, ad esempio Ottimizzazione guidata profilo, o è stato instrumentato da uno strumento di profilatura, ad esempio vsinstr.exe o vsperfmon.exe.
Spiegazione
Se l'assembly è già stato instrumentato o ottimizzato da un altro strumento di profilatura, l'assembly viene omesso dall'analisi di code coverage. L'analisi di code coverage non può essere eseguita su tali assembly.
Risoluzione
Disattivare l'ottimizzazione e usare una nuova compilazione.
Il codice non è gestito (.NET) o codice nativo (C++)
Analisi
Determinare se si eseguono alcuni test su codice gestito o C++.
Spiegazione
L'analisi di code coverage in Visual Studio è disponibile solo nel codice gestito e nativo (C++). Se si usano strumenti di terze parti, il codice può essere eseguito parzialmente o totalmente su una piattaforma diversa.
Risoluzione
Non disponibile.
Il nome del progetto include 'DataCollector'
I progetti che usano DataCollector nel nome del progetto non verranno identificati dal code coverage.
L'assembly è stato installato da NGen
Analisi
Determinare se l'assembly viene caricato dalla cache di immagini native.
Spiegazione
Per motivi di prestazioni, gli assembly di immagini nativi non vengono analizzati. Per altre informazioni, vedere Ngen.exe (Native Image Generator).
Risoluzione
Utilizzare una versione MSIL dell'assembly. Non elaborarlo con NGen.
Il file con estensione runsettings personalizzato presenta problemi di sintassi
Analisi
Se si usa un file con estensione runsettings personalizzato, potrebbe contenere un errore di sintassi. Il code coverage non viene eseguito e la finestra di code coverage non viene aperta alla fine dell'esecuzione del test o visualizza i risultati precedenti.
Spiegazione
È possibile eseguire gli unit test con un file con estensione runsettings personalizzato per configurare le opzioni di code coverage. Le opzioni consentono di includere o escludere i file. Per altre informazioni, vedere Personalizzare l'analisi code coverage.
Risoluzione
Esistono due possibili tipi di errori:
Errore XML
Aprire il file con estensione runsettings nell'editor XML di Visual Studio. Individuare le indicazioni degli errori.
Errore di espressione regolare
Ogni stringa del file è un'espressione regolare. Rivederle singolarmente per individuare gli errori, in particolare cercare:
- Parentesi non corrispondenti (...) o parentesi senza caratteri di escape \(...\). Se si desidera trovare la corrispondenza con una parentesi nella stringa di ricerca, è necessario utilizzare caratteri di escape. Ad esempio, per trovare la corrispondenza con una funzione, usare
.*MyFunction\(double\)
- L'asterisco o il segno più all'inizio di un'espressione. Per cercare una stringa di caratteri, utilizzare un punto seguito da un asterisco:
.*
- Parentesi non corrispondenti (...) o parentesi senza caratteri di escape \(...\). Se si desidera trovare la corrispondenza con una parentesi nella stringa di ricerca, è necessario utilizzare caratteri di escape. Ad esempio, per trovare la corrispondenza con una funzione, usare
File personalizzato con estensione runsettings con esclusioni non corrette
Analisi
Se si usa un file con estensione runsettings personalizzato, assicurarsi che includa l'assembly.
Spiegazione
È possibile eseguire gli unit test con un file con estensione runsettings personalizzato per configurare le opzioni di code coverage. Le opzioni consentono di includere o escludere i file. Per altre informazioni, vedere Personalizzare l'analisi code coverage.
Risoluzione
Rimuovere tutti i Include
nodi dal file con estensione runsettings e quindi rimuovere tutti i Exclude
nodi. Se in tal modo si risolve il problema, riportare i nodi nelle fasi.
Assicurarsi che il nodo DataCollectors specifichi Code coverage. Confrontarlo con l'esempio presente in Personalizzare l'analisi code coverage.
Il codice verrà sempre visualizzato come parzialmente non analizzato
Il codice di inizializzazione nelle DLL native viene eseguito prima della strumentazione
Analisi
Nel codice nativo collegato in modo statico, parte della funzione di inizializzazione DllMain e il codice che chiama vengono talvolta visualizzati come non analizzati, anche se il codice è stato eseguito.
Spiegazione
Lo strumento di code coverage funziona inserendo la strumentazione in un assembly immediatamente prima dell'avvio dell'applicazione. Nell'assembly caricato in precedenza il codice di inizializzazione in DllMain viene eseguito non appena viene caricato l'assembly e prima che venga eseguita l'applicazione. Il codice risulta non analizzato, il che in genere si applica agli assembly caricati in modo statico.
Risoluzione
Nessuno.