Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa esercitazione illustra un'esperienza interattiva che crea una soluzione di esempio dettagliata per apprendere i concetti di unit test. Se preferisci seguire il tutorial usando una soluzione predefinita, visualizza o scarica il codice di esempio prima di iniziare. Per istruzioni sul download, vedere esempi ed esercitazioni .
Questo articolo descrive il test di un progetto .NET Core. Se si sta testando un progetto ASP.NET Core, vedere test di integrazione in ASP.NET Core.
Prerequisiti
Creare il progetto di origine
Aprire una finestra della shell. Creare una directory denominata unit-testing-using-mstest per contenere la soluzione. All'interno di questa nuova directory eseguire dotnet new sln
per creare un nuovo file di soluzione per la libreria di classi e il progetto di test. Creare una directory PrimeService. La seguente struttura mostra la disposizione delle directory e dei file fino a questo punto.
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Imposta PrimeService come directory corrente ed esegui dotnet new classlib
per creare il progetto sorgente. Rinominare Class1.cs in PrimeService.cs. Sostituire il codice nel file con il codice seguente per creare un'implementazione non riuscita della PrimeService
classe :
using System;
namespace Prime.Services
{
public class PrimeService
{
public bool IsPrime(int candidate)
{
throw new NotImplementedException("Please create a test first.");
}
}
}
Tornare alla directory unit-testing-using-mstest di nuovo. Eseguire dotnet sln add
per aggiungere il progetto di libreria di classi alla soluzione:
dotnet sln add PrimeService/PrimeService.csproj
Creare il progetto di test
Creare la directory PrimeService.Tests . La seguente illustrazione mostra la struttura della directory:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Impostare la directory PrimeService.Tests come directory corrente e creare un nuovo progetto usando dotnet new mstest
. Il comando dotnet new crea un progetto di test che usa MSTest come libreria di test. Il modello configura il test runner nel file PrimeServiceTests.csproj :
<ItemGroup>
<PackageReference Include="MSTest" Version="3.2.0" />
<PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage" Version="17.10.1" />
</ItemGroup>
Il progetto di test richiede altri pacchetti per creare ed eseguire unit test.
dotnet new
nel passaggio precedente sono stati aggiunti i pacchetti e gli strumenti MSTest necessari per la creazione di report di code coverage.
Aggiungere la libreria delle classi PrimeService
come un'altra dipendenza al progetto. Usare il comando dotnet reference add
:
dotnet reference add ../PrimeService/PrimeService.csproj
È possibile visualizzare l'intero file nel repository degli esempi su GitHub.
La struttura seguente illustra il layout finale della soluzione:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Test Source Files
PrimeServiceTests.csproj
Passare alla directory unit-testing-using-mstest ed eseguire dotnet sln add
:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
Creare il primo test
Scrivere un test con esito negativo, passarlo, quindi ripetere il processo. Rimuovere UnitTest1.cs dalla directory PrimeService.Tests e creare un nuovo file C# denominato PrimeService_IsPrimeShould.cs con il contenuto seguente:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Prime.Services;
namespace Prime.UnitTests.Services
{
[TestClass]
public class PrimeService_IsPrimeShould
{
private readonly PrimeService _primeService;
public PrimeService_IsPrimeShould()
{
_primeService = new PrimeService();
}
[TestMethod]
public void IsPrime_InputIs1_ReturnFalse()
{
bool result = _primeService.IsPrime(1);
Assert.IsFalse(result, "1 should not be prime");
}
}
}
L'attributo TestClass indica una classe che contiene unit test. L'attributo TestMethod indica che un metodo è un metodo di test.
Salvare questo file ed eseguire dotnet test
per compilare i test e la libreria di classi e quindi eseguire i test. Lo strumento esecutore di test MSTest contiene il punto di ingresso del programma per eseguire i test.
dotnet test
avvia lo strumento di esecuzione dei test usando il progetto di test unitario che hai creato.
Il tuo test fallisce. L'implementazione non è ancora stata creata. Eseguire questo test scrivendo il codice più semplice nella classe PrimeService
che funziona:
public bool IsPrime(int candidate)
{
if (candidate == 1)
{
return false;
}
throw new NotImplementedException("Please create a test first.");
}
Nella directory unit-testing-using-mstest eseguire dotnet test
di nuovo. Il comando dotnet test
esegue una compilazione per il progetto PrimeService
e quindi per il progetto PrimeService.Tests
. Dopo la compilazione di entrambi i progetti, viene eseguito questo singolo test. Passa.
Aggiungere altre funzionalità
Ora che hai superato un test, è il momento di scrivere altri test. Esistono alcuni altri semplici casi per i numeri primi: 0, -1. È possibile aggiungere nuovi test con l'attributo TestMethod, ma questo diventa noioso. Esistono altri attributi MSTest che consentono di scrivere un gruppo di test simili. Un metodo di test può eseguire lo stesso codice ma avere argomenti di input diversi. È possibile usare l'attributo DataRow per specificare i valori per tali input.
Anziché creare nuovi test, applicare questi due attributi per creare un singolo test basato sui dati. Il test basato sui dati è un metodo che testa diversi valori minori di due, ovvero il numero primo più basso. Aggiungere un nuovo metodo di test in PrimeService_IsPrimeShould.cs:
[TestMethod]
[DataRow(-1)]
[DataRow(0)]
[DataRow(1)]
public void IsPrime_ValuesLessThan2_ReturnFalse(int value)
{
var result = _primeService.IsPrime(value);
Assert.IsFalse(result, $"{value} should not be prime");
}
Esegui dotnet test
e due di questi test falliscono. Per superare tutti i test, modificare la if
clausola all'inizio del IsPrime
metodo nel file PrimeService.cs :
if (candidate < 2)
Continuare a eseguire l'iterazione aggiungendo altri test, altre teorie e altro codice nella libreria principale. È stata completata la versione dei test e l'implementazione completa della libreria.
Hai creato una piccola libreria e un set di test unitari per tale libreria. La soluzione è stata strutturata in modo che l'aggiunta di nuovi pacchetti e test faccia parte del normale flusso di lavoro. La maggior parte del tempo e dello sforzo è stata concentrata sulla risoluzione degli obiettivi dell'applicazione.