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.
In questo articolo vengono fornite informazioni sulle API e sulle convenzioni usate da MSTest per scrivere e modellare i test.
Nota
I nomi degli attributi che terminano con "Attribute" possono usare la forma breve.
TestClass e TestClassAttribute sono equivalenti. Gli attributi con costruttori senza parametri possono omettere parentesi.
Struttura di test
Ogni classe di test MSTest deve avere l'attributo TestClass e ogni metodo di test deve avere l'attributo TestMethod :
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class CalculatorTests
{
[TestMethod]
public void Add_TwoNumbers_ReturnsSum()
{
// Arrange
var calculator = new Calculator();
// Act
var result = calculator.Add(2, 3);
// Assert
Assert.AreEqual(5, result);
}
}
TestClassAttribute
TestClassAttribute contrassegna una classe che contiene test e, facoltativamente, metodi di inizializzazione o pulizia. È possibile estendere questo attributo per personalizzare il comportamento della classe di test.
TestMethodAttribute
Contrassegna TestMethodAttribute un metodo come test da eseguire. I metodi di test devono essere:
- Metodi di istanza (non statici)
- Public
- Restituire
void,TaskoValueTask(MSTest v3.3+) - Senza parametri, a meno che non si usino attributi basati sui dati
[TestClass]
public class TestMethodExamples
{
[TestMethod]
public void SynchronousTest()
{
Assert.IsTrue(true);
}
[TestMethod]
public async Task AsynchronousTest()
{
await Task.Delay(100);
Assert.IsTrue(true);
}
}
Avvertimento
Non usare async void per i metodi di test. In sostituzione utilizzare async Task o async ValueTask.
DiscoverInternalsAttribute
L'attributo DiscoverInternalsAttribute assembly consente a MSTest di individuare internal classi e metodi di test. Per impostazione predefinita, solo public test vengono individuati. Questo attributo è particolarmente utile quando sono presenti test con parametri che usano tipi interni come parametri:
[assembly: DiscoverInternals]
internal record TestInput(int Value, string Description);
[TestClass]
public class CalculatorTests
{
internal static IEnumerable<TestInput> TestData
{
get
{
yield return new TestInput(1, "one");
yield return new TestInput(2, "two");
}
}
[TestMethod]
[DynamicData(nameof(TestData))]
internal void Add_WithTestInput_ReturnsExpected(TestInput input)
{
var calculator = new Calculator();
var result = calculator.Add(input.Value, 1);
Assert.AreEqual(input.Value + 1, result);
}
}
Senza DiscoverInternals, il metodo di test e il relativo tipo di parametro interno TestInput non vengono individuati dal test runner.
Concetti principali
La documentazione di MSTest è organizzata in base all'argomento:
| Argomento | Description |
|---|---|
| Asserzioni | Verificare i risultati previsti con le classi Assert |
| Test basati sui dati | Eseguire test con più input (DataRow, DynamicData) |
| Ciclo di vita dei test | Configurare e pulire a livello di assembly, classe e test |
| Controllo di esecuzione | Gestione dei thread, parallelizzazione, timeout, tentativi ed esecuzione condizionale |
| Organizzazione di test | Categorie, priorità, proprietari e metadati |
| Testcontext | Accedere alle informazioni sul runtime di test |
Guida rapida agli attributi
| Categoria | Attributi | Visualizza |
|---|---|---|
| Identificazione test |
TestClass, TestMethod, DiscoverInternals |
Questa pagina |
| Basato sui dati |
DataRow, DynamicData, TestDataRow |
Test basati sui dati |
| Lifecycle |
AssemblyInitialize, ClassInitialize, TestInitialize e le controparti di pulizia |
Ciclo di vita dei test |
| Gestione dei thread |
STATestClass, STATestMethod, UITestMethod |
Controllo di esecuzione |
| Parallelizzazione |
Parallelize, DoNotParallelize |
Controllo di esecuzione |
| Timeout/Ripetizione tentativi |
Timeout, Retry |
Controllo di esecuzione |
| Conditional |
Ignore, OSCondition, CICondition |
Controllo di esecuzione |
| Metadati |
TestCategory, TestProperty, OwnerPriority |
Organizzazione di test |
| Tracciamento del lavoro |
WorkItem, GitHubWorkItem |
Organizzazione di test |
Asserzioni
Usare le classi Assert dello spazio dei nomi Microsoft.VisualStudio.TestTools.UnitTesting per verificare funzionalità specifiche. Un metodo di test esegue l'esercizio del codice nell'applicazione, ma segnala la correttezza solo quando si includono istruzioni Assert.
Le asserzioni MSTest sono suddivise in:
-
Assertclasse: asserzioni per utilizzo generico (AreEqual,IsTrue,ThrowsException) -
StringAssertclasse: asserzioni specifiche delle stringhe (Contains,Matches,StartsWith) -
CollectionAssertclasse: asserzioni di raccolta (Contains,AllItemsAreUnique,AreEquivalent)
Test dei membri privati
È possibile testare i membri privati utilizzando classi wrapper di reflection:
- PrivateObject: per i metodi di istanza privata
- PrivateType: per i metodi statici privati
Suggerimento
Valutare se i metodi privati necessitano di test diretti. Spesso, i test tramite interfacce pubbliche offrono una copertura migliore e test più gestibili.