Condividi tramite


Guida passo-passo: Sviluppo Test-First con la funzionalità Generare dall'uso

In questo argomento viene illustrato come usare la funzionalità Genera dall'utilizzo , che supporta lo sviluppo test-first.

Lo sviluppo test-first è un approccio alla progettazione software in cui si scrivono prima unit test in base alle specifiche del prodotto e quindi si scrive il codice sorgente necessario per rendere i test riusciti. Visual Studio supporta lo sviluppo test-first generando nuovi tipi e membri nel codice sorgente quando si fa per la prima volta riferimento ad essi nei test case, prima che siano definiti.

Visual Studio genera i nuovi tipi e membri con interruzioni minime del flusso di lavoro. È possibile creare stub per tipi, metodi, proprietà, campi o costruttori senza lasciare il contesto attuale nel codice. Quando si apre una finestra di dialogo per specificare le opzioni per la generazione del tipo di dati, il controllo torna immediatamente al file aperto corrente quando la finestra di dialogo viene chiusa.

La funzionalità Genera dall'utilizzo può essere usata con framework di test che si integrano con Visual Studio. In questo argomento viene illustrato Microsoft Unit Testing Framework.

Annotazioni

Le istruzioni in questo articolo illustrano la versione più recente dell'esperienza di sviluppo interattiva (IDE) disponibile in Visual Studio. Il computer potrebbe visualizzare nomi o posizioni diversi per alcuni elementi dell'interfaccia utente. È possibile usare una versione diversa di Visual Studio o impostazioni di ambiente diverse. Per altre informazioni, vedere Personalizzare l'IDE.

Creare un progetto libreria di classi Di Windows e un progetto di test

  1. In C# o Visual Basic creare un nuovo progetto libreria di classi Windows . Denominarlo GFUDemo_VB o GFUDemo_CS, a seconda della lingua in uso.

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse sull'icona della soluzione nella parte superiore, scegliere Aggiungi>nuovo progetto.

  3. Creare un nuovo progetto di unit test (.NET Framework).

Aggiungere un riferimento al progetto Libreria di classi

  1. In Esplora soluzioni, nel progetto di unit test fare clic con il pulsante destro del mouse sulla voce Riferimenti e scegliere Aggiungi riferimento.

  2. Nella finestra di dialogo Gestione riferimenti selezionare Progetti e quindi selezionare il progetto libreria di classi.

  3. Scegliere OK per chiudere la finestra di dialogo Gestione riferimenti .

  4. Salva la soluzione. A questo punto è possibile iniziare a scrivere test.

Generare una nuova classe da un test unitario

  1. Il progetto di test contiene un file denominato UnitTest1. Fare doppio clic su questo file in Esplora soluzioni per aprirlo nell'editor di codice. Sono stati generati una classe di test e un metodo di test.

  2. Individuare la dichiarazione per la classe UnitTest1 e rinominarla in AutomobileTest.

    Annotazioni

    IntelliSense offre ora due alternative per il completamento dell'istruzione IntelliSense: modalità di completamento e modalità di suggerimento. Usare la modalità di suggerimento per le situazioni in cui le classi e i membri vengono usati prima di essere definiti. Quando si apre una finestra di IntelliSense , è possibile premere CTRL+ALT+SPAZIO per passare dalla modalità di completamento alla modalità suggerimento. Per altre informazioni, vedere Usare IntelliSense . Modalità suggerimento ti aiuterà a digitare Automobile nel passaggio successivo.

  3. Individuare il TestMethod1() metodo e rinominarlo in DefaultAutomobileIsInitializedCorrectly(). All'interno di questo metodo creare una nuova istanza di una classe denominata Automobile, come illustrato negli screenshot seguenti. Viene visualizzata una sottolineatura ondulata, che indica un errore in fase di compilazione, e si accende una lampadina di avviso Azioni rapide nel margine sinistro o direttamente sotto la sottolineatura ondulata se si passa il puntatore del mouse su di essa.

    Azioni rapide in Visual Basic

    Azioni rapide in C#

  4. Scegliere o fare clic sulla lampadina Azioni rapide . Verrà visualizzato un messaggio di errore che indica che il tipo Automobile non è definito. Vengono presentate anche alcune soluzioni.

  5. Fare clic su Genera nuovo tipo per aprire la finestra di dialogo Genera tipo . In questa finestra di dialogo sono disponibili opzioni che includono la generazione del tipo in un progetto diverso.

  6. Nell'elenco Progetto fare clic su GFUDemo_VB o GFUDemo_CS per indicare a Visual Studio di aggiungere il file al progetto di libreria di classi anziché al progetto di test. Se non è già selezionata, scegliere Crea nuovo file e denominarlo Automobile.cs o Automobile.vb.

    Finestra di dialogo Genera nuovo tipo

  7. Fare clic su OK per chiudere la finestra di dialogo e creare il nuovo file.

  8. In Esplora soluzioni esaminare il nodo del progetto GFUDemo_VB o GFUDemo_CS per verificare che il nuovo file Automobile.vb o Automobile.cs sia presente. Nell'editor di codice, il cursore è ancora su AutomobileTest.DefaultAutomobileIsInitializedCorrectly, permettendoti di continuare a scrivere il tuo test con il minimo disturbo.

Generare uno stub di proprietà

Si supponga che la specifica del prodotto indichi che la Automobile classe ha due proprietà pubbliche denominate Model e TopSpeed. Queste proprietà devono essere inizializzate con i valori predefiniti di "Not specified" e -1 dal costruttore predefinito. Lo unit test seguente verificherà che il costruttore predefinito imposti le proprietà sui valori predefiniti corretti.

  1. Aggiungere la riga di codice seguente al DefaultAutomobileIsInitializedCorrectly metodo di test.

    Assert.IsTrue((myAuto.Model == "Not specified") && (myAuto.TopSpeed == -1));
    
  2. Poiché il codice fa riferimento a due proprietà non predefinite in Automobile, viene visualizzata una sottolineatura ondulata sotto Model e TopSpeed. Passare il puntatore del mouse Model e scegliere la lampadina di errore Azioni rapide , quindi scegliere Genera proprietà 'Automobile.Model'.

  3. Generare uno stub per la proprietà TopSpeed nello stesso modo.

    Automobile Nella classe i tipi delle nuove proprietà vengono dedotti correttamente dal contesto.

Generare uno stub per un nuovo costruttore

A questo punto, creeremo un metodo di test che genererà uno stub del costruttore per inizializzare le proprietà Model e TopSpeed. Successivamente, si aggiungerà altro codice per completare il test.

  1. Aggiungere il metodo di test aggiuntivo seguente alla AutomobileTest classe .

    [TestMethod]
    public void AutomobileWithModelNameCanStart()
    {
        string model = "Contoso";
        int topSpeed = 199;
        Automobile myAuto = new Automobile(model, topSpeed);
    }
    
  2. Fare clic sulla lampadina di errore Azioni rapide sotto la sottolineatura ondulata rossa e quindi fare clic su Genera costruttore in 'Automobile'.

    Nel file della classe Automobile, si noti che il nuovo costruttore ha esaminato i nomi delle variabili locali usate nella chiamata al costruttore, ed ha trovato le proprietà con gli stessi nomi nella classe Automobile, e ha fornito codice nel corpo del costruttore per archiviare i valori degli argomenti nelle proprietà Model e TopSpeed.

  3. Dopo aver generato il nuovo costruttore, viene visualizzata una sottolineatura ondulata sotto la chiamata al costruttore predefinito in DefaultAutomobileIsInitializedCorrectly. Il messaggio di errore indica che la Automobile classe non ha alcun costruttore che accetta zero argomenti. Per generare un costruttore predefinito esplicito che non dispone di parametri, fare clic sulla lampadina di errore Azioni rapide e quindi fare clic su Genera costruttore in 'Automobile'.

Generare uno stub per un metodo

Si supponga che la specifica indichi che un nuovo Automobile può essere inserito in uno IsRunning stato se le relative Model proprietà e TopSpeed sono impostate su un valore diverso dai valori predefiniti.

  1. Aggiungere le righe seguenti al AutomobileWithModelNameCanStart metodo .

    myAuto.Start();
    Assert.IsTrue(myAuto.IsRunning == true);
    
  2. Fare clic sulla lampadina di errore Azioni rapide per la chiamata al myAuto.Start metodo e quindi fare clic su Genera metodo 'Automobile.Start'.

  3. Fare clic sulla lampadina Azioni rapide per la IsRunning proprietà e quindi fare clic su Genera proprietà 'Automobile.IsRunning'.

    La Automobile classe contiene ora un metodo denominato Start() e una proprietà denominata IsRunning.

Esegui i test

  1. Scegliere Esegui>tutti i test dal menu Test.

    Il comando Esegui>tutti i test esegue tutti i test in tutti i framework di test scritti per la soluzione corrente. In questo caso, ci sono due test e entrambi hanno esito negativo, come previsto. Il DefaultAutomobileIsInitializedCorrectly test non riesce perché la Assert.IsTrue condizione restituisce False. Il AutomobileWithModelNameCanStart test ha esito negativo perché il Start metodo nella Automobile classe genera un'eccezione.

    La finestra Risultati test è illustrata nella figura seguente.

    Risultati dei test non riusciti

  2. Nella finestra Risultati dei test, fare doppio clic su ogni riga dei risultati per passare alla posizione del test corrispondente.

Implementare il codice sorgente

  1. Aggiungere il codice seguente al costruttore predefinito in modo che le Modelproprietà e IsRunningTopSpeed siano tutte inizializzate nei valori predefiniti corretti di "Not specified", -1e False (o false per C#).

    public Automobile()
    {
        this.Model = "Not specified";
        this.TopSpeed = -1;
        this.IsRunning = true;
    }
    
  2. Quando il metodo Start viene chiamato, il flag IsRunning deve essere impostato su true solo se le proprietà Model o TopSpeed sono impostate su un valore diverso dal valore predefinito. Rimuovere NotImplementedException dal corpo del metodo e aggiungere il codice seguente.

    public void Start()
    {
        if (this.Model != "Not specified" || this.TopSpeed != -1)
            this.IsRunning = true;
        else
            this.IsRunning = false;
    }
    

Eseguire di nuovo i test

  • Scegliere Esegui dal menu Test e quindi fare clic su Tutti i test.

    Questa volta i test vengono superati. La finestra Risultati test è illustrata nella figura seguente.

    Risultati dei test superati