Procedura dettagliata: Sviluppo di test preventivi con la funzionalità di generazione dall'utilizzo
Questo argomento illustra come usare la funzionalità Generate From Usage , che supporta lo sviluppo di test preventivi.
Losviluppo di test preventivi è un approccio alla progettazione software in cui prima si scrivono unit test in base alle specifiche del prodotto e quindi si scrive il codice sorgente necessario per fare in modo che i test abbiano esito positivo. Visual Studio supporta lo sviluppo di test preventivi grazie alla generazione di nuovi tipi e membri nel codice sorgente quando si fa riferimento a essi per la prima volta nei test case, prima che vengano definiti.
Visual Studio genera i nuovi tipi e membri con un'interruzione minima del flusso di lavoro. È possibile creare stub per tipi, metodi, proprietà, campi o costruttori senza abbandonare la posizione corrente nel codice. Quando si apre una finestra di dialogo per specificare le opzioni per la generazione dei tipi, lo stato attivo torna immediatamente al file aperto corrente quando si chiude la finestra di dialogo.
La funzionalità di generazione dall'uso può essere usata con framework di test che si integrano con Visual Studio. In questo argomento viene illustrato il framework di unit test Microsoft.
Nota
I nomi o i percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio in questo articolo potrebbero essere diversi nel computer in uso. È possibile usare un'edizione diversa di Visual Studio o impostazioni di ambiente diverse. Per altre informazioni, vedere Personalizzare l'IDE.
Creare un progetto di libreria di classi Windows e un progetto di test
In C# o Visual Basic creare un nuovo progetto di Libreria di classi Windows. Assegnare al progetto il nome
GFUDemo_VB
oGFUDemo_CS
, a seconda del linguaggio in uso.In Esplora soluzioni fare clic con il pulsante destro del mouse sull'icona in alto, scegliere Aggiungi>Nuovo progetto.
Creare un nuovo progetto Progetto unit test (.NET Framework).
Aggiungere un riferimento al progetto di libreria di classi
Nel progetto di unit test in Esplora soluzioni fare clic con il pulsante destro del mouse sulla voce Riferimenti e scegliere Aggiungi riferimento.
Nella finestra di dialogo Gestione riferimenti selezionare Progetti e scegliere un progetto di libreria di classi.
Scegliere OK per chiudere la finestra di dialogo Gestione riferimenti.
Salvare la soluzione. A questo punto, è possibile iniziare a scrivere test.
Generare una nuova classe da uno unit test
Il progetto di test contiene un file denominato UnitTest1. Fare doppio clic su questo file in Esplora soluzioni per aprirlo nell'editor del codice. Vengono generati una classe di test e un metodo di test.
Individuare la dichiarazione della classe
UnitTest1
e rinominarla inAutomobileTest
.Nota
IntelliSense offre ora due alternative per il completamento delle istruzioni IntelliSense: la modalità di terminazione e la modalità con suggerimenti. Usare la modalità con suggerimenti per i casi in cui classi e membri vengono usati prima di essere definiti. Quando una finestra di IntelliSense è aperta, è possibile premere CTRL+ALT+BARRA SPAZIATRICE per passare dalla modalità di terminazione alla modalità con suggerimenti e viceversa. Per altre informazioni, vedere Usare IntelliSense. La modalità con suggerimenti sarà utile quando si digita
Automobile
nel passaggio successivo.Individuare il metodo
TestMethod1()
e rinominarlo inDefaultAutomobileIsInitializedCorrectly()
. All'interno di questo metodo creare una nuova istanza di una classe denominataAutomobile
, come illustrato negli screenshot seguenti. Vengono visualizzate una sottolineatura ondulata che indica un errore in fase di compilazione e una lampadina di errore Azioni rapide nel margine a sinistra o direttamente sotto la sottolineatura a zigzag se si passa il puntatore del mouse.Scegliere o fare clic sulla lampadina Azioni rapide. Verrà visualizzato un messaggio di errore a indicare che il tipo
Automobile
non è definito. Vengono anche proposte alcune soluzioni.Fare clic su Genera nuovo tipo per aprire la finestra di dialogo Genera tipo. Questa finestra di dialogo contiene alcune opzioni, tra cui la possibilità di generare il tipo in un progetto diverso.
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 l'opzione Crea nuovo file e denominare il file Automobile.cs o Automobile.vb.
Fare clic su OK per chiudere la finestra di dialogo e creare il nuovo file.
In Esplora soluzioni verificare che sotto il nodo di progetto GFUDemo_VB o GFUDemo_CS sia presente il nuovo file Automobile.vb o Automobile.cs. Nell'editor del codice lo stato attivo è ancora in
AutomobileTest.DefaultAutomobileIsInitializedCorrectly
. È quindi possibile continuare a scrivere il test con un'interruzione minima.
Generare uno stub per una proprietà
Si supponga che la specifica del prodotto indichi che la classe Automobile
ha due proprietà pubbliche denominate Model
e TopSpeed
. Queste proprietà devono essere inizializzate con i valori predefiniti "Not specified"
e -1
dal costruttore predefinito. Lo unit test seguente verificherà che il costruttore predefinito imposti le proprietà sui valori predefiniti corretti.
Aggiungere la riga di codice seguente al metodo di test di
DefaultAutomobileIsInitializedCorrectly
.Poiché il codice fa riferimento a due proprietà non definite in
Automobile
, viene visualizzata una sottolineatura ondulata sottoModel
eTopSpeed
. Passare il puntatore del mouse suModel
, scegliere la lampadina di errore Azioni rapide e quindi l'opzione Genera proprietà 'Automobile.Model'.Generare uno stub per la proprietà
TopSpeed
nello stesso modo.Nella classe
Automobile
i tipi delle nuove proprietà vengono dedotti correttamente dal contesto.
Generare uno stub per un nuovo costruttore
A questo punto viene creato un metodo di test che genererà uno stub per il costruttore per inizializzare le proprietà Model
e TopSpeed
. Successivamente, verrà aggiunto altro codice per completare il test.
Aggiungere l'ulteriore metodo di test seguente alla classe
AutomobileTest
.Fare clic sulla lampadina di errore Azioni rapide sotto la sottolineatura rossa a zigzag e selezionare Genera costruttore in 'Automobile'.
Nel file della classe
Automobile
osservare che il nuovo costruttore ha esaminato i nomi delle variabili locali che vengono usati nella chiamata al costruttore, ha trovato le proprietà che hanno gli stessi nomi nella classeAutomobile
e ha fornito il codice nel corpo del costruttore per archiviare i valori degli argomenti nelle proprietàModel
eTopSpeed
.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 classeAutomobile
non ha un costruttore che accetta zero argomenti. Per generare un costruttore predefinito esplicito che non ha parametri, fare clic sulla lampadina di errore Azioni rapide e quindi su Genera costruttore in 'Automobile'.
Generare uno stub per un metodo
Si supponga che la specifica indichi che un nuovo oggetto Automobile
può essere impostato in uno stato IsRunning
se le sue proprietà Model
e TopSpeed
sono impostate su valori diversi da quelli predefiniti.
Aggiungere le righe seguenti al metodo
AutomobileWithModelNameCanStart
.Fare clic sulla lampadina di errore Azioni rapide per la chiamata al metodo
myAuto.Start
e quindi su Genera metodo 'Automobile.Start'.Fare clic sulla lampadina Azioni rapide per la proprietà
IsRunning
e quindi su Genera proprietà 'Automobile.IsRunning'.La classe
Automobile
ora contiene un metodo denominatoStart()
e una proprietà denominataIsRunning
.
Eseguire i test
Nel menu Test scegliere Esegui>Tutti i 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 hanno entrambi esito negativo, come previsto. Il test
DefaultAutomobileIsInitializedCorrectly
ha esito negativo perché la condizioneAssert.IsTrue
restituisceFalse
. Il testAutomobileWithModelNameCanStart
ha esito negativo perché il metodoStart
nella classeAutomobile
genera un'eccezione.La finestra Risultati test è illustrata nella figura seguente.
Nella finestra Risultati del test fare doppio clic su ogni riga dei risultati del test per passare alla posizione di ogni test.
Implementare il codice sorgente
Aggiungere il codice seguente al costruttore predefinito in modo che le proprietà
Model
,TopSpeed
eIsRunning
vengano tutte inizializzate con i valori predefiniti corretti, ovvero"Not specified"
,-1
eFalse
(ofalse
per C#).Quando il metodo
Start
viene chiamato, deve impostare il flagIsRunning
su true solo se la proprietàModel
oTopSpeed
è impostata su un valore diverso da quello predefinito. RimuovereNotImplementedException
dal corpo del metodo e aggiungere il codice seguente.
Eseguire di nuovo i test
Scegliere Esegui dal menu Test e fare clic su Tutti i test.
Questa volta il test ha esito positivo. La finestra Risultati test è illustrata nella figura seguente.