Share via


Cenni preliminari su unit test

Aggiornamento: novembre 2007

Gli unit test sono test programmatici scritti in Visual C# o Visual Basic, oppure in Visual C++ e compilati con /clr:safe.

Nota:

Per dettagli sulle modalità di utilizzo degli unit test con il codice di produzione C++ e degli unit test scritti in C++, vedere Unit test e C++.

Gli unit test vengono utilizzati per verificare il comportamento di altro codice sorgente chiamando direttamente i metodi di una classe, passando parametri adatti. Quindi, se si includono istruzioni di asserzione, gli unit test possono testare i valori prodotti rispetto ai valori previsti. I metodi di unit test risiedono nelle classi di test, memorizzate nei file dei codici sorgenti.

È possibile creare unit test utilizzando una funzionalità di generazione di codice che consente di realizzare il codice sorgente iniziale del test oppure scrivendo il test completamente a mano. In entrambi i casi, la classe di test e tutti i metodi di test vengono identificati utilizzando gli attributi programmatici.

Ciascuna classe di test è contrassegnata con l'attributo [TestClass()]. Ciascun unit test è un metodo di test contrassegnato con l'attributo [TestMethod()]. Tali attributi vengono automaticamente assegnati quando vengono generati gli unit test; quando si codificano unit test a mano, è necessario aggiungere gli attributi della classe e del metodo autonomamente. Per ulteriori informazioni, vedere Struttura di unit test.

Generazione di unit test

È possibile generare unit test utilizzando una finestra di dialogo accessibile dalla finestra degli strumenti di Visual Studio. Ciascun unit test viene creato come metodo C#, Visual Basic o Visual C++. I relativi codice e attributi risiedono in un file sorgente in un progetto di test dello stesso linguaggio. Il nuovo test è indirizzato al codice specifico che si desidera testare. È possibile generare un solo unit test per un singolo metodo, più test per metodi selezionati o più test per tutti i metodi di una classe o spazio dei nomi.

È possibile generare unit test da codice sorgente nel progetto corrente. È anche possibile generare unit test da un assembly nel file system, operazione utile quando il codice sorgente non è disponibile.

Il codice di un test appena generato viene compilato, ma prima che possa produrre risultati utili è necessario modificarlo. Ad esempio, è possibile modificarlo per eseguire assegnazioni di variabili e per personalizzare le istruzioni Assert. Gli unit test generati contengono istruzioni TODO che indicano le righe di codice da modificare.

Nota:

In Strumenti di test Team System vengono utilizzate le convenzioni di nominazione durante la generazione di unit test. Ad esempio, un file di test viene denominato concatenando la parola "Test" con il nome del file contenente il codice da testare; ad esempio "Class1Test.cs." Anche i nomi delle classi di test e dei metodi di test vengono generati utilizzando valori predefiniti. È possibile modificare tali valori predefiniti nella finestra di dialogo Configurazione generazione test a cui è possibile accedere selezionando Configura nella finestra di dialogo Generazione unit test.

Per ulteriori informazioni, vedere Procedura: generare unit test.

Creazione di unit test

È possibile creare uno unit test anche manualmente, senza utilizzare la funzione di generazione. Il modo migliore per eseguire questa operazione è aggiungere uno unit test a un progetto di test; verrà creato un metodo di test matrice senza codice ma con l'attributo [TestMethod()]. Per completare il test, è necessario modificarlo nel file sorgente, che risiede in un progetto di test della soluzione. Per ulteriori informazioni, vedere Procedura: modificare unit test e Struttura di unit test.

Framework di unit test

Il framework di unit test fornisce numerose classi Assert aggiuntive e altre classi che offrono flessibilità nella scrittura di unit test. Per ulteriori informazioni, vedere la documentazione sullo spazio dei nomi e i tipi di Framework per unit test in Microsoft.VisualStudio.TestTools.UnitTesting.

Ereditarietà delle classi di test

Una classe di test è qualsiasi classe contrassegnata con l'attributo TestClass. Le classi di test possono ora ereditare membri da altre classi di test. In altri termini, è possibile creare test riutilizzabili nelle classi di test di base; classi di test derivate possono ereditare test dalle classi di test di base. Questa funzionalità elimina la duplicazione del codice di test e dà agli sviluppatori più flessibilità nell'esecuzione di unit test sul codice di produzione.

Una classe di test non può ereditare da una classe che è in un assembly diverso. Questa limitazione può essere aggirata nel modo seguente:

  1. Definire la classe di test di base in un file di codice sorgente e aggiungere il file al progetto A.

  2. Aggiungere lo stesso file di codice sorgente a un progetto diverso, il progetto B. A tale scopo, fare clic col pulsante destro del mouse sul progetto in Esplora soluzioni, fare clic su Aggiungi, fare clic su Elemento esistente e quindi utilizzare la finestra di dialogo Aggiungi elemento esistente per selezionare il file.

  3. Anche se il progetto B viene compilato in un assembly diverso, include la classe di test di base. Le altre classi di test nel progetto B possono ereditare da quella classe di test di base.

Esempio di ereditarietà

Il codice di produzione ha due implementazioni: una utilizza una versione back-end di Microsoft SQL Server e l'altra utilizza Oracle. Entrambe implementazioni devono funzionare nello stesso modo. È possibile creare una classe di test astratta denominata DBTestSuite che contiene codice di test standard. È quindi possibile creare due classi, SQLTestSuite e OracleTestSuite, che derivano entrambe da DBTestSuite. Le classi derivate devono solo implementare il metodo Connect astratto. Una classe di test si connetterà quindi a Microsoft SQL Server e l'altra a Oracle.

È possibile inoltre creare una classe di test EmptySQLTestSuite che deriva da SQLTestSuite per testare un database di Microsoft SQL Server vuoto. Per migliorare le prestazioni è possibile ignorare determinati metodi di test non adatti per testare un database vuoto.

Se si utilizza l'ereditarietà delle classi di test, la finestra Visualizzazione test e l'Editor elenco dei test visualizzano i metodi di test sia nelle classi di base che nelle classi figlio. Per vedere in quale classe si trova un test, visualizzare le colonne Nome classe o Nome classe completo in Esplora elenchi di test. Per ulteriori informazioni, vedere Procedura: personalizzare visualizzazioni test.

Test di metodi privati

Mediante l'utilizzo degli unit test, è possibile testare non solo i metodi pubblici ma anche i metodi privati. Come con i metodi pubblici, gli unit test per i metodi privati vengono creati automaticamente quando si generano test dal codice che si desidera testare. Per ulteriori informazioni, vedere Procedura: testare un metodo privato e Utilizzo delle funzioni di accesso private.

Tipi speciali di unit test

Nella tabella seguente sono elencati tipi aggiuntivi di unit test:

Tipo di unit test

Descrizione

Unit test basati sui dati

Un test basato sui dati è uno unit test che viene configurato in modo da essere chiamato ripetutamente per ogni riga di un'origine dati. I dati di ogni riga sono disponibili ad ogni esecuzione successiva del test come dati di input. Per ulteriori informazioni, vedere Cenni preliminari sugli unit test basati su dati.

ASP.NET unit test

Gli unit test di ASP.NET vengono utilizzati per verificare il comportamento del codice in un'applicazione ASP.NET nella risposta alle richieste di pagine. Gli unit test di ASP.NET vengono eseguiti nell'applicazione ASP.NET in corso di test. Per ulteriori informazioni, vedere Cenni preliminari sugli unit test ASP.NET.

Unit test di Smart Device

Gli unit test di Smart Device sono unit test che vengono eseguiti nel processo host di Smart Device su uno Smart Device o un emulatore. Per ulteriori informazioni, vedere Cenni preliminari sugli unit test di Smart Device.

Unit test dei servizi Web

Per informazioni sugli unit test del servizio Web, vedere Test di servizi Web.

Vedere anche

Concetti

Struttura di unit test

Unit test e C++

Utilizzo di unit test basati su dati

Altre risorse

Utilizzo di unit test ASP.NET

Utilizzo di unit test di Smart Device

Gestione dei test

Esecuzione di test

Analisi dei risultati dei test