Condividi tramite


Configurare e usare Live Unit Testing

Durante lo sviluppo di un'applicazione, Live Unit Testing esegue automaticamente gli unit test interessati in background e presenta i risultati e il code coverage in tempo reale. Quando si modifica il codice, Live Unit Testing fornisce feedback su come le modifiche hanno interessato i test esistenti e se il nuovo codice aggiunto è coperto da uno o più test esistenti. Questo feedback ricorda di scrivere unit test durante la correzione di bug o l'aggiunta di nuove funzionalità.

Nota

A partire da Visual Studio 2022 versione 17.3, Live Unit Testing è stato aggiornato. Per nuovi contenuti, vedere Configurare e usare Live Unit Testing durante lo sviluppo di applicazioni.

Quando si usa Live Unit Testing per i test, i dati vengono mantenuti sullo stato dei test. L'uso di dati persistenti consente a Live Unit Testing di offrire prestazioni superiori durante l'esecuzione dinamica dei test in risposta alle modifiche al codice.

Live Unit Testing è disponibile per progetti C# e Visual Basic destinati a .NET Core o .NET Framework nell'edizione Enterprise di Visual Studio.

Framework di test supportati

Live Unit Testing è compatibile con i tre framework di unit test elencati nella tabella seguente. Viene visualizzata anche la versione minima supportata degli adattatori e dei framework. I framework di unit test sono tutti disponibili su NuGet.org.

Framework di test Versione minima dell'adapter di Visual Studio Versione minima del framework
xUnit.net xunit.runner.visualstudio versione 2.2.0-beta3-build1187 xunit 1.9.2
NUnit NUnit3TestAdapter versione 3.5.1 NUnit versione 3.5.0
MSTest MSTest.TestAdapter 1.1.4-preview MSTest.TestFramework 1.0.5-preview

Se sono presenti progetti di test basati su MSTest meno recenti che fanno riferimento a Microsoft.VisualStudio.QualityTools.UnitTestFramework e non si vuole passare ai pacchetti NuGet MSTest più recenti, eseguire l'aggiornamento a Visual Studio 2019 o Visual Studio 2017.

In alcuni casi, potrebbe essere necessario ripristinare in modo esplicito i pacchetti NuGet a cui fa riferimento un progetto per il funzionamento di Live Unit Testing. È possibile procedere in due modi:

  • Eseguire il ripristino eseguendo una compilazione esplicita della soluzione. Selezionare Compila ricompila>soluzione nel menu di primo livello di Visual Studio.
  • Ripristinare i pacchetti nella soluzione. Fare clic con il pulsante destro del mouse sulla soluzione e scegliere Ripristina pacchetti NuGet.

Configurare

Configurare Live Unit Testing selezionando Strumenti>Opzioni nella barra dei menu di primo livello di Visual Studio. Nel riquadro sinistro della finestra di dialogo Opzioni selezionare Live Unit Testing.

Dopo l'abilitazione di Live Unit Testing (vedere la sezione successiva, Avviare, sospendere e arrestare), è anche possibile aprire la finestra di dialogo Opzioni . Selezionare Test live Unit Testing Options (Opzioni test>live unit test).>

L'immagine seguente mostra le opzioni di configurazione di Live Unit Testing disponibili nella finestra di dialogo.

Screenshot che mostra le opzioni di configurazione di Live Unit Testing.

Le opzioni configurabili includono:

  • Sospensione dell'esecuzione di Live Unit Testing in caso di compilazione e debug di una soluzione.

  • Sospensione dell'esecuzione di Live Unit Testing quando l'alimentazione a batteria del sistema scende sotto una soglia specificata.

  • Esecuzione automatica di Live Unit Testing all'apertura di una soluzione.

  • Abilitazione del simbolo di debug e generazione di commenti in formato documentazione XML.

  • Directory in cui archiviare i dati salvati in modo permanente.

  • Possibilità di eliminare tutti i dati persistenti. Questa funzionalità è utile quando Live Unit Testing si comporta in modo imprevedibile o imprevisto, che suggerisce che i dati persistenti siano danneggiati.

  • Intervallo dopo il quale si verifica il timeout di un test case. Il valore predefinito è 30 secondi.

  • Numero massimo di processi di test creati da Live Unit Testing.

  • Quantità massima di memoria che i processi di Live Unit Testing possono utilizzare.

  • Livello delle informazioni scritte nella finestra Output di Live Unit Testing.

    È possibile scegliere di non visualizzare informazioni di log (Nessuno), solo i messaggi errore (Errore), messaggi di errore e messaggi informativi (Informazioni, che corrisponde al valore predefinito) o tutti i dettagli (Dettagliato).

    È anche possibile visualizzare l'output dettagliato nella finestra Output di Live Unit Testing. Assegnare un valore pari a 1 a una variabile di ambiente a livello di utente denominata VS_UTE_DIAGNOSTICS e quindi riavviare Visual Studio.

    Per acquisire in un file i messaggi di log dettagliati di MSBuild restituiti da Live Unit Testing, impostare la variabile di ambiente a livello di utente LiveUnitTesting_BuildLog sul nome del file in cui salvare il log.

Avviare, sospendere e arrestare

Per abilitare Live Unit Testing, selezionare Test>Live Unit Testing>Start nel menu di primo livello di Visual Studio. Quando Live Unit Testing è abilitato, le opzioni disponibili nel menu Live Unit Testing cambiano da un singolo elemento, Start, a Pause and Stop:When Live Unit Testing is enabled, the options available on the Live Unit Testing menu change from a single item, Start, to Pause and Stop:

  • Sospende temporaneamente Live Unit Testing.

    Quando Live Unit Testing viene sospeso, la visualizzazione della copertura non viene visualizzata nell'editor, ma tutti i dati raccolti vengono mantenuti. Per riprendere Live Unit Testing, selezionare Continua dal menu Live Unit Testing . Live Unit Testing esegue il lavoro necessario per recuperare tutte le modifiche apportate durante la sospensione e aggiorna i glifi in modo appropriato.

  • L'arresto arresta completamente Live Unit Testing. Live Unit Testing elimina tutti i dati raccolti.

Se si avvia Live Unit Testing in una soluzione che non include un progetto di unit test, le opzioni Sospendi e Arresta vengono visualizzate nel menu Live Unit Testing , ma Live Unit Testing non viene avviato. Nella finestra Output viene visualizzato un messaggio che inizia, "Nessun adattatore di test supportato fa riferimento a questa soluzione...".

È possibile sospendere temporaneamente o arrestare completamente Live Unit Testing in qualsiasi momento. È possibile eseguire queste azioni, ad esempio, se ci si trova al centro del refactoring e si sa che i test verranno interrotti per un po'.

Visualizzare la visualizzazione della copertura

Dopo l'abilitazione di Live Unit Testing, aggiorna ogni riga di codice nell'editor di Visual Studio per indicare se il codice scritto è coperto dagli unit test e se i test che lo coprono vengono superati.

L'immagine seguente mostra righe di codice con test superati e non superati e righe di codice non coperti dai test. Le linee con un verde "✓" sono coperte solo passando i test. Le linee con una "x" rossa sono coperte da uno o più test non superati. Le linee con "" blu ➖ non sono coperte da alcun test.

Screenshot che mostra il code coverage in Visual Studio.

La visualizzazione della copertura di Live Unit Testing viene aggiornata immediatamente quando si modifica il codice nell'editor di codice. Durante l'elaborazione delle modifiche, le modifiche alla visualizzazione indicano che i dati non sono aggiornati aggiungendo un'immagine timer rotonda sotto i simboli passati, non riusciti e non coperti, come illustrato nell'immagine seguente.

Screenshot che mostra il code coverage in Visual Studio con l'icona del timer.

Ottenere informazioni sullo stato dei test

Passando il puntatore del mouse sul simbolo superato o non riuscito nella finestra del codice, è possibile visualizzare il numero di test che stanno raggiungendo tale riga. Per visualizzare lo stato dei singoli test, selezionare il simbolo.

Screenshot che mostra lo stato del test per un simbolo in Visual Studio.

Oltre a fornire i nomi e i risultati dei test, la descrizione comando consente di rieseguire o eseguire il debug del set di test. Se si seleziona uno o più test nella descrizione comando, è anche possibile eseguire o eseguire il debug solo di tali test. In questo modo è possibile eseguire il debug dei test senza dover uscire dalla finestra del codice.

Quando si esegue il debug, oltre a osservare eventuali punti di interruzione già impostati, l'esecuzione del programma viene sospesa quando il debugger esegue un Assert metodo che restituisce un risultato imprevisto.

Quando si passa il puntatore del mouse su un test non riuscito nella descrizione comando, si espande per fornire altre informazioni sull'errore, come illustrato nell'immagine seguente. Per passare direttamente a un test non riuscito, fare doppio clic sulla descrizione comando.

Screenshot che mostra le informazioni sulla descrizione comando di test non riuscite in Visual Studio.

Quando si passa al test non riuscito, Live Unit Testing indica visivamente nella firma del metodo i test con:

  • Passato (indicato da un beaker mezzo pieno insieme a un verde "✓").
  • Non riuscito (indicato da un beaker mezzo pieno insieme a un rosso "🞩").
  • Non sono coinvolti in Live Unit Testing (indicato da un beaker mezzo pieno insieme a un blu "➖").

I metodi non di test non sono identificati con un simbolo. L'immagine seguente illustra tutti e quattro i tipi di metodi.

Screenshot che mostra i metodi di test in Visual Studio con simboli superati o non riusciti.

Diagnosticare e correggere gli errori di test

Dal test non riuscito è possibile eseguire facilmente il debug del codice prodotto, apportare modifiche e continuare a sviluppare l'applicazione. Poiché Live Unit Testing viene eseguito in background, non è necessario arrestare e riavviare Live Unit Testing durante il debug, la modifica e il ciclo di continuazione.

Ad esempio, l'errore di test mostrato nell'immagine precedente è stato causato da un presupposto non corretto nel metodo di test che i caratteri nonhabetici restituiscono true quando vengono passati al System.Char.IsLower metodo . Dopo aver corretto il metodo di test, tutti i test devono essere superati. Non è necessario sospendere o arrestare Live Unit Testing.

Finestra Live Unit Testing

Live Unit Testing, simile a Esplora test, offre un'interfaccia che consente di eseguire ed eseguire test ed analizzare i risultati dei test. Quando Live Unit Testing è abilitato, lo stato degli unit test in Esplora test viene aggiornato immediatamente. Non è necessario eseguire in modo esplicito gli unit test. Quando Live Unit Testing non è abilitato o viene arrestato, Live Unit Testing visualizza lo stato degli unit test l'ultima volta che è stato eseguito un test. Dopo il riavvio di Live Unit Testing, è necessaria una modifica del codice sorgente per rieseguire i test.

È possibile avviare Live Unit Testing selezionando Test>Live Unit Testing>Start nel menu di primo livello di Visual Studio. È anche possibile aprire la finestra Live Unit Testing usando la finestra Visualizza>altro Windows>Live Unit Testing.

È possibile notare nella finestra Live Unit Testing che alcuni test vengono disattivati. Ad esempio, quando si arresta e si riavvia Live Unit Testing, la finestra Live Unit Testing svanisce tutti i test, come illustrato nell'immagine seguente.

I risultati dei test non superati indicano che il test non fa parte dell'ultima esecuzione di Live Unit Test. I test vengono eseguiti solo quando viene rilevata una modifica al test o le dipendenze del test. Se non è presente alcuna modifica, evita l'esecuzione inutilmente del test. In questo caso, il risultato del test in grigio è ancora "aggiornato", anche se non fa parte dell'esecuzione più recente.

Screenshot che mostra i test disattivati in Esplora test.

È possibile rieseguire tutti i test visualizzati sbiaditi apportando una modifica al codice.

Esistono alcune differenze tra l'esecuzione automatica di Live Unit Testing e l'aggiornamento dei risultati dei test e l'esecuzione esplicita di test da Esplora test. Queste differenze includono:

  • L'esecuzione o il debug di test dalla finestra Esplora test esegue normali file binari. Live Unit Testing esegue file binari instrumentati.
  • Live Unit Testing non crea un nuovo dominio applicazione per l'esecuzione dei test. Esegue invece i test dal dominio predefinito. Quando i test vengono eseguiti dalla finestra Esplora test, viene invece creato un nuovo dominio applicazione.
  • Live Unit Testing esegue i test di ogni assembly di test in modo sequenziale. Nella finestra Esplora test è possibile scegliere di eseguire più test in parallelo.

Soluzioni di grandi dimensioni

Se la soluzione include 10 o più progetti, Visual Studio visualizza la finestra di dialogo seguente quando si:

  • Avviare Live Unit Testing e non sono presenti dati persistenti.
  • Selezionare Strumenti>Opzioni>Live Unit Testing>Elimina dati persistenti.

Screenshot che mostra la finestra di dialogo Live Unit Testing per progetti di grandi dimensioni.

La finestra di dialogo avvisa che l'esecuzione dinamica di un numero elevato di test in progetti di grandi dimensioni può influire gravemente sulle prestazioni. Se si seleziona OK, Live Unit Testing esegue tutti i test nella soluzione. Se si seleziona Annulla, è possibile selezionare i test da eseguire. La sezione seguente illustra i passaggi.

Includere ed escludere progetti e metodi di test

Per le soluzioni con molti progetti di test, è possibile controllare quali progetti e singoli metodi in un progetto partecipano a Live Unit Testing. Se ad esempio una soluzione contiene centinaia di progetti di test, è possibile selezionare un set specifico di progetti di test da includere in Live Unit Testing.

Esistono diversi modi per selezionare i progetti di test. Dipende dal fatto che si voglia escludere tutti i test nel progetto o nella soluzione, includere o escludere la maggior parte dei test o escludere singoli test. In Live Unit Testing lo stato di inclusione/esclusione viene salvato come impostazione utente e memorizzato alla chiusura o alla riapertura di una soluzione.

Escludere tutti i test in un progetto o una soluzione

Per selezionare i singoli progetti negli unit test, seguire questa procedura dopo l'avvio di Live Unit Testing:

  1. Fare clic con il pulsante destro del mouse sulla soluzione in Esplora soluzioni e selezionare Live Unit Testing Exclude (Escludi live unit testing>) per escludere l'intera soluzione.
  2. Fare clic con il pulsante destro del mouse su ogni progetto di test che si vuole includere nei test e selezionare Live Unit Testing Include (Includi live unit testing>).

Escludere singoli test dalla finestra dell'editor di codice

Per includere o escludere singoli metodi di test, è possibile usare la finestra dell'editor del codice. Fare clic con il pulsante destro del mouse sulla firma del metodo di test nella finestra dell'editor di codice. Qundi seleziona una delle opzioni riportate di seguito:

  • Live Unit Testing>Include <selected method>
  • Live Unit Testing>Exclude <selected method>
  • Live Unit Testing>Exclude All But <selected method>

Escludere i test a livello di codice

È possibile applicare l'attributo ExcludeFromCodeCoverageAttribute per evitare a livello di codice che metodi, classi o strutture restituiscano informazioni sul code coverage in Live Unit Testing.

Usare gli attributi seguenti per escludere singoli metodi da Live Unit Testing:

  • xUnit: [Trait("Category", "SkipWhenLiveUnitTesting")]
  • NUnit: [Category("SkipWhenLiveUnitTesting")]
  • MSTest: [TestCategory("SkipWhenLiveUnitTesting")]

Usare gli attributi seguenti per escludere un intero assembly di test da Live Unit Testing:

  • xUnit: [assembly: AssemblyTrait("Category", "SkipWhenLiveUnitTesting")]
  • NUnit: [assembly: Category("SkipWhenLiveUnitTesting")]
  • MSTest: [assembly: TestCategory("SkipWhenLiveUnitTesting")]