Condividi tramite


Procedura dettagliata: creazione ed esecuzione di unit test

Aggiornamento: novembre 2007

In questa procedura dettagliata sarà illustrata la creazione, l'esecuzione e la personalizzazione di una serie di test utilizzando Strumenti di test Team System. Sarà innanzitutto illustrato il progetto C# in fase di sviluppo, quindi saranno creati i test in cui sarà utilizzato il codice e saranno esaminati i risultati. Infine, sarà modificato il codice del progetto e i test saranno nuovamente eseguiti.

Nota:

Per informazioni sulle modalità di esecuzione dei test dalla riga di comando, vedere Procedura dettagliata: utilizzo dell'utilità di test della riga di comando.

In questa procedura dettagliata, si completeranno le seguenti operazioni:

  • Preparazione di un progetto "Bank Account" da utilizzare nella procedura dettagliata.

  • Apertura di un progetto esistente.

  • Creazione di unit test per metodi pubblici e privati.

  • Esecuzione dei test nel codice.

  • Individuazione e correzione degli errori nei test.

  • Individuazione e correzione degli errori nel codice.

Prerequisiti

Preparazione per la procedura dettagliata

Per preparare la procedura dettagliata

  1. Aprire Visual Studio Team System Test Edition.

  2. Dal menu File, scegliere Nuovo, quindi Progetto.

    Verrà visualizzata la finestra di dialogo Nuovo progetto.

  3. In Tipi progetto, fare clic su Visual C#.

  4. In Modelli, fare clic su Libreria di classi.

  5. Nella casella Nome, digitare Bank quindi scegliere OK.

    Nota:

    Se il nome "Bank" è stato già utilizzato, scegliere un altro nome per il progetto.

    Viene creato il nuovo progetto Bank e viene visualizzato in Esplora soluzioni.

  6. Fare doppio clic sul file Class1.cs in Esplora soluzioni per aprirlo nell'editor del codice Visual Studio.

  7. Copiare il codice sorgente da Esempio di unit test.

  8. Sostituire il contenuto originale di Class1.cs con il codice di Esempio di unit test.

  9. Scegliere Compila soluzione dal menu Compila.

A questo punto si dispone di un progetto denominato Bank che contiene il codice sorgente da testare e gli strumenti da utilizzare a questo scopo. Nello spazio dei nomi per Bank, BankAccountNS, è presente la classe pubblica BankAccount, i cui metodi saranno testati nelle procedure seguenti.

Creazione di unit test

Prerequisito: attenersi alla procedura Preparazione per la procedura dettagliata.

Per creare uno unit test

  1. In Esplora soluzioni, fare doppio clic sul file Class1.cs nel progetto Bank.

    Si apre il file di origine per la visualizzazione e la modifica.

  2. Nella classe BankAccount nel file Class1.cs, scorrere fino al metodo Debit().

  3. Fare clic con il pulsante destro del mouse sul metodo Debit() e selezionare Crea unit test.

    Viene visualizzata la finestra di dialogo Crea unit test.

    In Selezione corrente, in una struttura ad albero viene visualizzata la classe e la gerarchia di membri dell'assembly in cui si trova la classe BankAccount. In questa pagina è possibile generare unit test per qualsiasi selezione di membri e scegliere un progetto di test in cui si desidera inserire gli unit test generati.

    Nella struttura ad albero, è selezionato solo il metodo Debit(). Lasciare tale metodo selezionato e selezionare anche il metodo Credit().

  4. Per Progetto di output, selezionare Crea un nuovo Progetto di test Visual C#.

  5. Fare clic su Impostazioni.

    Verrà visualizzata la finestra di dialogo Impostazioni di generazione test. In Impostazioni di denominazione, è possibile modificare il metodo di generazione dei nomi dei file, delle classi e dei metodi del test. In Generale, è possibile cambiare altri aspetti della generazione del test. Non alterare i valori predefiniti per queste impostazioni e fare clic su OK.

  6. Nella finestra di dialogo Genera unit test scegliere OK.

    Viene visualizzata la finestra di dialogo Nuovo progetto di test.

  7. Accettare il nome predefinito e fare clic su Crea.

    Viene creato un progetto denominato TestProject1, visualizzato in Esplora soluzioni.

    Al progetto TestProject1 viene aggiunto un file denominato BankAccountTest.cs, contenente una classe di test. La classe viene popolata con una proprietà TestContext e con i metodi per testare i metodi Debit() e Credit().

    Nota:

    A ogni metodo di test viene automaticamente assegnato l'attributo TestMethod(). Ogni test corrisponde a un singolo metodo nel codice sotto test che si desidera testare. I metodi di test sono contenuti in una classe di test a cui è assegnato l'attributo TestClass().

  8. In BankAccountTest.cs specificare i valori per le variabili da testare. Scorrere fino al metodo DebitTest dove sono visualizzate le righe // TODO che indicano le variabili da impostare. Quali valori utilizzare? Per rispondere, è necessario conoscere i valori che saranno utilizzati durante l'esecuzione dell'applicazione. I valori vengono determinati nel passaggio seguente.

  9. Aprire il file Class1.cs e scorrere fino al metodo Main. Il nome del cliente inizia con Mr. Bryan Walton, il saldo del conto inizia con 11.99, il metodo Credit viene richiamato con il parametro 5.77 e il metodo Debit viene richiamato con il parametro 11.22. Quindi, se questo conto inizia con un valore di Balance di 11.99, chiamando il metodo Debit quando si invia 11.22 viene restituito il nuovo valore di Balance di 0.77.

    Nota:

    Sarà utilizzato il valore Balance previsto (0,77) nella procedura Esecuzione e personalizzazione di unit test.

  10. Nel file BankAccountTest.cs e scorrere fino al metodo DebitTest.

  11. Impostare i seguenti valori:

    BankAccount target = new BankAccount("Mr. Bryan Walton", 11.99);
    double amount = 11.22;
    
  12. Nel file BankAccountTest.cs, apportare le stesse modifiche nel metodo CreditTest.

  13. Salvare il file BankAccountTest.cs.

È stato creato un file del codice sorgente contenente i test per il progetto Bank. Adesso è possibile eseguire i test nella classe BankAccountTest nel codice del progetto Bank.

Esecuzione e personalizzazione di unit test

Prerequisito: seguire la procedura Creazione di unit test.

Per eseguire e personalizzare uno unit test

  1. Aprire la finestra Visualizzazione test.

  2. Fare clic con il pulsante destro del mouse su DebitTest e scegliere Esegui selezione.

    Se la finestra Risultati test non è già aperta, si apre adesso. Viene eseguito il test DebitTest.

    Nella colonna Risultato nella finestra Risultati test, viene visualizzato lo stato del test come In esecuzione durante l'esecuzione del test. Al termine dell'esecuzione del test, il risultato del test cambia in Senza risultato.

  3. Nella finestra Risultati test, fare doppio clic sulla riga che rappresenta il test.

    Verrà aperta la pagina Dettagli risultati contenente le informazioni sui risultati del test.

  4. Nella pagina Dettagli risultati viene visualizzato il messaggio di errore "Impossibile eseguire Assert.Inconclusive. Impossibile verificare un metodo che non restituisce valori". Per creare correttamente un test, è necessario innanzitutto trovare e valutare questa istruzione Assert.

  5. Per individuare il metodo di test contenente l'istruzione Assert, aprire il file BankAccountTest.cs e scorrere fino al metodo DebitTest().

  6. L'istruzione Assert è l'ultima riga del metodo DebitTest. Contiene quanto segue:

    Assert.Inconclusive("A method that does not return a value cannot be verified.");
    

    Impostare l'istruzione Assert come commento.

  7. Se il test viene eseguito a questo stadio, il risultato sarà Superato ma solo perché l'oggetto del test è inesistente. È necessario aggiungere il codice per l'esecuzione del test che fornisca i risultati previsti. Aggiungere la seguente istruzione alla fine del metodo DebitTest:

    Assert.AreEqual((System.Convert.ToDouble(0.77)), target.Balance, 0.05);
    

    Questa istruzione confronta il risultato previsto (0.77) con il risultato effettivo dalla chiamata del metodo Balance della classe BankAccount. Se i due valori non sono uguali, Assert restituisce False e il test viene interrotto.

    Nota:

    Nell'istruzione Assert è presente un terzo parametro, delta, con un valore di 0.05. Il parametro delta è obbligatorio in questo overload del metodo Assert.AreEqual; consente di compensare l'errore di arrotondamento intrinseco nei tipi a virgola mobile come Doubles.

È stato eseguito il metodo DebitTest generato della classe di test BankAccountTest; se necessario, sono state apportate modifiche. Adesso è possibile testare la correttezza del metodo Debit nell'applicazione.

Esecuzione di unit test e correzione del codice

Prerequisito: seguire la procedura Esecuzione e personalizzazione di unit test.

Per eseguire uno unit test e una correzione del codice

  1. Eseguire nuovamente il test Debit. Nel file BankAccountTest.cs, fare clic con il pulsante destro del mouse sul metodo DebitTest (), quindi fare clic su Esegui test.

    Nella colonna Risultato nella finestra Risultati test, viene visualizzato lo stato del test come In esecuzione durante l'esecuzione del test. Al termine dell'esecuzione del test, il risultato del test cambia in Test non superato.

  2. Nella finestra Risultati test, fare doppio clic sulla riga che rappresenta il test.

    Verrà aperta la pagina Dettagli risultati, con il messaggio di errore "Impossibile eseguire Assert.AreEqual. Prevista una differenza non maggiore di < 0.05 > tra il valore previsto < 0.77 > e il valore effettivo < 23.21 >." Questi numeri sembrano indicare un'operazione matematica non corretta. Poiché il metodo DebitTest della classe BankAccountTest testa il metodo Debit della classe BankAccount, è necessario innanzitutto verificare il metodo Debit.

  3. Aprire il file Class1.cs e scorrere fino al metodo Debit.

  4. Notare la seguente assegnazione:

    m_balance += amount;
    

    Con questa assegnazione viene aggiunto un importo al saldo mentre nel metodo Debit deve essere sottratto. Modificare questa riga in modo che contenga quanto segue:

    m_balance -= amount;
    
  5. Eseguire di nuovo il test Debit.

    Nella colonna Risultato della finestra Risultati test viene visualizzato Superato per DebitTest.

    Nota:

    Non è stato necessario ricompilare il progetto dopo la modifica del codice sorgente perché il progetto viene compilato con l'esecuzione senza generazione di errore.

È stato creato uno unit test che funziona e, attraverso tale test, è stato individuato e corretto un errore del codice.

Creazione ed esecuzione di uno unit test per un metodo privato

Prerequisito: seguire la procedura Esecuzione di unit test e correzione del codice.

Per creare ed eseguire uno unit test per un metodo privato

  1. Aprire il file Class1.cs nel progetto Bank.

  2. Fare clic con il pulsante destro del mouse sul metodo FreezeAccount() e scegliere Crea unit test.

    Verrà visualizzata la finestra di dialogo Crea unit test.

    Nella struttura ad albero che viene visualizzata, è selezionato solo il metodo FreezeAccount().

  3. (Facoltativo) Fare clic su Filtro, quindi deselezionare Visualizza elementi non pubblici. Il metodo FreezeAccount() viene rimosso dall'elenco dei metodi figlio della classe BankAccount. Fare clic nuovamente su Filtro, quindi selezionare Visualizza elementi non pubblici per visualizzare nuovamente il metodo FreezeAccount().

  4. Assicurarsi che il metodo FreezeAccount() sia selezionato, quindi scegliere OK.

    Verrà creato un file della funzione di accesso privata nuovo denominato Bank.accessor. Tale file contiene specifici metodi della funzione di accesso utilizzati nel test per chiamare indirettamente metodi privati nella classe BankAccount. Il nuovo file viene visualizzato in Esplora soluzioni nella cartella Riferimenti test.

  5. Aprire il file BankAccountTest.cs e scorrere fino al metodo FreezeAccountTest().

  6. Modificare il codice del metodo FreezeAccountTest () come indicato di seguito. Le aree nuove o modificate vengono indicate:

    public void FreezeAccountTest()
    {
        BankAccount_Accessor target = new BankAccount_Accessor("Mr. Bryan Walton", 11.99); // TODO: Initialize to an appropriate value
    target.FreezeAccount(); 
        // Assert.Inconclusive("A method that does not return a value cannot be verified.");
            bool creditAccount = false; // False means account could be credited: Fail test.     // Try to credit account    try    {        target.Credit(1.00);     }    catch (System.Exception)    {        // Threw exception. FreezeAccount worked correctly: Pass test.         creditAccount = true;    }        // Assert fails if 'creditAccount' condition is false. Fail test.    Assert.IsTrue(creditAccount, "Was able to credit account.");
    }
    
  7. Eseguire il test FreezeAccountTest.

    Nella colonna Risultato della finestra Risultati test lo stato del test finale viene visualizzato come Superato. È il risultato previsto perché il test ha chiamato il metodo Credit() dopo avere bloccato l'account chiamando il metodo FreezeAccount().

È stato aggiunto un metodo privato, creato un nuovo unit test per tale metodo ed eseguito il test. È possibile eseguire il test più volte, utilizzando per la variabile balance altri valori limite come 15.00.

Passaggi successivi

Quando si eseguono test su codice in un assembly, è possibile verificare la percentuale del codice del progetto che si sta testando raccogliendo dati di code coverage. Per ulteriori informazioni, vedere Procedura dettagliata: esecuzione di test e visualizzazione di code coverage.

È possibile eseguire test da una riga di comando anziché in Visual Studio. Per ulteriori informazioni, vedere Procedura dettagliata: utilizzo dell'utilità di test della riga di comando.

Vedere anche

Attività

Esempio di unit test

Concetti

Framework per unit test

Report dei risultati di test generati