Condividi tramite


Composizione di uno unit test

Quando si crea uno unit test, diversi file vengono aggiunti alla soluzione. In questo argomento verrà utilizzato un esempio di unit test per esplorare i file più comuni. L'esempio deriva dall'argomento Procedura dettagliata: creazione ed esecuzione di unit test.

Componenti di un file di unit test

Quando si crea uno unit test, viene creato un file di unit test separato per ogni classe da testare. Ogni file di unit test contiene un metodo di test per ogni metodo da testare. In questo esempio entrambi i metodi sottoposti a test appartengono alla stessa classe. È pertanto presente un solo file di classe di test: BankAccountTest.cs.

Sezione iniziale del file

Nella figura seguente vengono illustrate le prime righe di codice, tra cui il riferimento agli spazi dei nomi, l'attributo TestClassAttribute e la classe TestContext. Per ottenere esempi di codice, vedere la procedura dettagliata.

Sezione superiore di un file di unit test di esempio

  1. Microsoft.VisualStudio.TestTools.UnitTesting: quando si crea uno unit test, un riferimento allo spazio dei nomi Microsoft.VisualStudio.TestTools.UnitTesting viene aggiunto al progetto di test e lo spazio dei nomi viene incluso in un'istruzione using all'inizio del file di unit test. Lo spazio dei nomi dispone di molte classi valide per l'utilizzo degli unit test, tra cui:

    • Classi di asserzione utilizzabili per verificare le condizioni negli unit test

    • Attributi di inizializzazione e pulizia per eseguire codice prima o dopo gli unit test in modo da assicurare uno stato iniziale e uno stato finale specifici

    • Attributo ExpectedException per verificare che un determinato tipo di eccezione venga generato durante l'esecuzione dello unit test

    • Classe TestContext che archivia informazioni fornite agli unit test, ad esempio la connessione dati per i test basati sui dati e informazioni necessarie per eseguire unit test per i servizi Web ASP.NET

    Per ulteriori informazioni, vedere Microsoft.VisualStudio.TestTools.UnitTesting.

  2. TestClassAttribute: quando si crea uno unit test, l'oggetto TestClassAttribute è incluso nel file di test per indicare che la classe in questione può contenere metodi contrassegnati con l'attributo [TestMethod()]. In assenza di TestClassAttribute, i metodi di test vengono ignorati.

    Una classe di test può ereditare metodi da un'altra classe di test presente nello stesso assembly. Ciò significa che è possibile creare metodi di test in una classe di test di base e quindi utilizzarli in classi di test derivate.

    Per ulteriori informazioni, vedere TestClassAttribute.

  3. TestContext: quando si creano unit test, per ogni classe di test viene inclusa una variabile denominata testContextInstance. Le proprietà della classe TestContext archiviano informazioni sul test corrente. Per ulteriori informazioni, vedere TestContext.

Sezione finale del file

Nella figura seguente è illustrata l'ultima parte del codice generato nella procedura dettagliata, la quale include la sezione "Additional test attributes" (Attributi di test aggiuntivi), l'attributo TestMethod e la logica del metodo con un'istruzione Assert.

Sezione inferiore di un file di unit test di esempio

  1. Attributi di test aggiuntivi: espandere questa sezione per visualizzare metodi impostati come commenti utilizzabili per includere inizializzazione e pulizia mediante gli attributi seguenti:

    1. [ClassInitialize ()]   Utilizzare ClassInitialize per eseguire codice prima di eseguire il primo test nella classe.

    2. [ClassCleanUp ()]   Utilizzare ClassCleanup per eseguire codice dopo l'esecuzione di tutti i test.

    3. [TestInitialize ()]   Utilizzare TestInitialize per eseguire codice prima di eseguire ogni test.

    4. [Il TestCleanup ()]   Utilizzare TestCleanup per eseguire codice dopo l'esecuzione di ogni test.

      Creare metodi contrassegnati con l'attributo [ClassInitialize ()] o [TestInitialize ()] per preparare gli aspetti dell'ambienti in cui verranno eseguiti gli unit test. Lo scopo è stabilire uno stato noto per l'esecuzione dell'unit test. Ad esempio, è possibile utilizzare il metodo [ClassInitialize()] o [TestInitialize()] per copiare, modificare o creare determinati file di dati che verranno utilizzati dal test.

      Creare metodi contrassegnati con l'attributo [ClassCleanup()] o [TestCleanUp{}] per riportare l'ambiente a uno stato noto dopo l'esecuzione di un test. Questa operazione potrebbe comportare l'eliminazione di file nelle cartelle o il ripristino di uno stato noto del database. Un esempio è la reimpostazione dello stato iniziale di un database di magazzino dopo aver eseguito il test di un metodo utilizzato in un'applicazione per le voci di ordini.

      Nota

      Inoltre, si consiglia di utilizzare un codice di pulitura in un metodo [TestCleanup()] or [ClassCleanup()] e non in un metodo finalizzatore. Le eccezioni generate da un metodo finalizzatore non vengono rilevate e possono causare risultati imprevisti.

  2. TestMethodAttribute: quando si crea uno unit test, ogni metodo di quest'ultimo è contrassegnato con l'attributo [TestMethod()]. In assenza di questo attributo, lo unit test non viene eseguito. Per ulteriori informazioni sull'attributo TestMethod, vedere TestMethodAttribute.

  3. Logica del metodo di test con istruzione Assert: ogni unit test generato contiene variabili vuote e un'istruzione Assert segnaposto. L'istruzione Assert segnaposto predefinita è in genere l'istruzione Assert.Inconclusive. Per rendere il test significativo, è necessario inizializzare le variabili e sostituire il segnaposto con un'istruzione Assert appropriata.

    In questo esempio è stato lasciato il metodo di unit test CreditTest così come è stato generato, con le relative istruzioni TODO. Le variabili sono state tuttavia inizializzate e l'istruzione Assert è stata sostituita nel metodo di test DebitTest. Le istruzioni TODO vengono utilizzate come promemoria della possibilità di inizializzare tali righe di codice.

    Nota

    Il contenuto dei metodi di test può variare, a seconda del tipo di unit test e della natura del metodo da testare.

Nota sulle convenzioni di denominazione: gli strumenti di test di Visual Studio utilizzano convenzioni di denominazione per la generazione di unit test. Il nome dei file di unit test viene ad esempio generato concatenando la parola "Test" con il nome del file contenente il codice da testare ("BankAccountTest.cs" in questo esempio). I nomi delle classi e dei metodi di test vengono analogamente generati in base a impostazioni predefinite. È possibile modificare tali impostazioni predefinite nella finestra di dialogo Impostazioni di generazione unit test accessibile facendo clic su Impostazioni nella finestra di dialogo Crea unit test.

Elementi aggiunti alla soluzione

In questa sezione sono illustrati file diversi da quello di unit test generati in Procedura dettagliata: creazione ed esecuzione di unit test.

Nota

I file effettivamente creati per impostazione predefinita quando si genera uno unit test dipendono dalle impostazioni del progetto di test. Per modificare tali impostazioni, fare clic su Strumenti e quindi su Opzioni. Nella finestra di dialogo Opzioni espandere Strumenti di test, quindi fare clic su Progetto di test.

Nella figura seguente viene illustrato Esplora soluzioni dopo la creazione di uno unit test per il progetto di esempio.

Esplora soluzioni per un progetto di unit test di esempio

  1. Elementi di soluzione (Solution Items): in Elementi di soluzione sono presenti due file:

    • Local.testsettings: queste impostazioni controllano la modalità di esecuzione dei test locali che non raccolgono dati diagnostici.

    • Bank.vsmdi: questo file contiene informazioni su elenchi di test presenti nella soluzione. Tali informazioni vengono utilizzate per popolare la finestra Editor elenco dei test.

    • TraceAndTestImpact.testsettings: queste impostazioni controllano la modalità di esecuzione dei test locali che raccolgono un set specifico di dati diagnostici.

  2. Progetto di test: i file rimanenti necessari per gli unit test.

  3. Proprietà del progetto di test: questo nodo contiene il file AssemblyInfo.cs, che offre opzioni di compilazione per il progetto.

  4. Riferimenti del progetto di test: questo nodo contiene riferimenti necessari per l'esecuzione degli unit test. Quando si genera uno unit test da codice esistente, sono inclusi i riferimenti necessari. È tuttavia possibile aggiungere riferimenti per personalizzare i test.

  5. File dello unit test: si tratta del file dello unit test descritto nella prima sezione di questo argomento. Per ogni classe che si desidera sottoporre a test, viene creato un file di unit test separato nel progetto di test. In questo esempio entrambi i metodi sottoposti a test appartengono alla stessa classe. È pertanto presente un solo file di classe di test, ovvero BankAccountTest.cs.

Vedere anche

Riferimenti

Microsoft.VisualStudio.TestTools.UnitTesting

Concetti

Creazione ed esecuzione di unit test per il codice esistente

Unit test e C++

Unit test per i metodi generici

Unit test per servizi Web ASP.NET

Unit test per metodi privati, interni e Friend.