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.
Usare le classi Assert dello spazio dei nomi Microsoft.VisualStudio.TestTools.UnitTesting per verificare funzionalità specifiche. Un metodo di test esegue il codice nell'applicazione ma segnala la correttezza solo quando si includono Assert istruzioni.
Informazioni generali
MSTest offre tre classi di asserzione:
| Class | Scopo |
|---|---|
Assert |
Asserzioni per utilizzo generico per valori, tipi ed eccezioni. |
StringAssert |
Asserzioni specifiche della stringa per modelli, sottostringhe e confronti. |
CollectionAssert |
Asserzioni di raccolta per il confronto e la convalida delle raccolte. |
Suggerimento
Quando la funzionalità esiste sia in AssertStringAssert/ che in CollectionAssert, preferire la classe Assert. La Assert classe offre una migliore individuabilità ed è la scelta consigliata per il nuovo codice.
StringAssert e CollectionAssert vengono mantenuti per la compatibilità con le versioni precedenti.
Tutti i metodi di asserzione accettano un parametro di messaggio facoltativo che viene visualizzato quando l'asserzione ha esito negativo, consentendo di identificare la causa:
Assert.AreEqual(expected, actual, "Values should match after processing");
Classe Assert
Usare la classe Assert per verificare che il codice sottoposto a test si comporti come previsto.
Metodi di asserzione comuni
[TestMethod]
public async Task AssertExamples()
{
// Equality
Assert.AreEqual(5, calculator.Add(2, 3));
Assert.AreNotEqual(0, result);
// Reference equality
Assert.AreSame(expected, actual);
Assert.AreNotSame(obj1, obj2);
// Boolean conditions
Assert.IsTrue(result > 0);
Assert.IsFalse(string.IsNullOrEmpty(name));
// Null checks
Assert.IsNull(optionalValue);
Assert.IsNotNull(requiredValue);
// Type checks
Assert.IsInstanceOfType<IDisposable>(obj);
Assert.IsNotInstanceOfType<string>(obj);
// Exception testing (MSTest v3.8+)
Assert.ThrowsExactly<ArgumentNullException>(() => service.Process(null!));
await Assert.ThrowsExactlyAsync<InvalidOperationException>(
async () => await service.ProcessAsync());
}
API disponibili
- Assert.AreEqual
- Assert.AreNotEqual
- Assert.AreNotSame
- Assert.AreSame
- Assert.Contains
- Assert.ContainsSingle
- Assert.DoesNotContain
- Assert.DoesNotEndWith
- Assert.DoesNotMatchRegex
- Assert.DoesNotStartWith
- Assert.Fail
- Assert.HasCount
- Assert.Inconclusive
- Assert.IsEmpty
- Assert.IsFalse
- Assert.IsGreaterThan
- Assert.IsGreaterThanOrEqualTo
- Assert.IsInRange
- Assert.IsInstanceOfType
- Assert.IsLessThan
- Assert.IsLessThanOrEqualTo
- Assert.IsNegative
- Assert.IsNotEmpty
- Assert.IsNotInstanceOfType
- Assert.IsNotNull
- Assert.IsNull
- Assert.IsPositive
- Assert.IsTrue
- Assert.MatchesRegex
- Assert.StartsWith
- Assert.Throws
- Assert.ThrowsAsync
- Assert.ThrowsExactly
- Assert.ThrowsExactlyAsync
Classe StringAssert
Usare la classe StringAssert per confrontare ed esaminare le stringhe.
Annotazioni
Tutti i StringAssert metodi hanno equivalenti nella Assert classe . Preferire i metodi Assert per una migliore individuabilità. La StringAssert classe viene mantenuta per la compatibilità con le versioni precedenti.
Le API disponibili sono:
- StringAssert.Contains
- StringAssert.DoesNotMatch
- StringAssert.EndsWith
- StringAssert.Matches
- StringAssert.StartsWith
Classe CollectionAssert
Usare la classe CollectionAssert per confrontare raccolte di oggetti o verificare lo stato di una raccolta.
Annotazioni
Quando esiste un metodo equivalente nella Assert classe (ad esempio Assert.Contains, Assert.DoesNotContain), preferire l'uso Assert per una migliore individuabilità. La CollectionAssert classe viene mantenuta principalmente per la compatibilità con le versioni precedenti.
Le API disponibili sono:
- CollectionAssert.AllItemsAreInstancesOfType
- CollectionAssert.AllItemsAreNotNull
- CollectionAssert.AllItemsAreUnique
- CollectionAssert.AreEqual
- CollectionAssert.AreEquivalent
- CollectionAssert.AreNotEqual
- CollectionAssert.AreNotEquivalent
- CollectionAssert.Contains
- CollectionAssert.DoesNotContain
- CollectionAssert.IsNotSubsetOf
- CollectionAssert.IsSubsetOf
Procedure consigliate
Usare asserzioni specifiche: preferire
AreEqualIsTrue(a == b)per messaggi di errore migliori.Includere messaggi descrittivi: consente di identificare rapidamente gli errori con messaggi di asserzione chiari.
Testare una cosa alla volta: ogni metodo di test deve verificare un singolo comportamento.
Utilizzare
Throws/ThrowsExactlyper le eccezioni: in MSTest v3.8+, preferireAssert.Throws,Assert.ThrowsExactlye le relative controparti asincrone (ThrowsAsync,ThrowsExactlyAsync) sull'attributoExpectedException.Preferire
a : quando la funzionalità esiste in entrambe le classi, usare la classe per una migliore individuabilità e coerenza.
Analizzatori correlati
Gli analizzatori seguenti consentono di garantire un uso appropriato delle asserzioni:
-
MSTEST0006 - evitare
ExpectedExceptionl'attributo, usare i metodiAssert.Throwsinvece. - MSTEST0017 : gli argomenti di asserzione devono essere passati nell'ordine corretto.
- MSTEST0023 : non negare le asserzioni booleane.
-
MSTEST0025 - Preferire
Assert.Failanziché condizioni sempre false. - MSTEST0026 : gli argomenti di asserzione devono evitare l'accesso condizionale.
- MSTEST0032 - Esaminare le condizioni di asserzione sempre vere.
- MSTEST0037 : usare metodi di asserzione appropriati.
-
MSTEST0038 : evitare
Assert.AreSamecon i tipi valore. -
MSTEST0039 : usare metodi più recenti
Assert.Throws. - MSTEST0040 : evitare di usare asserzioni nel contesto async void.
-
MSTEST0046 : usare
AssertanzichéStringAssert. -
-
Assert.ThrowsMSTEST0051 deve contenere una singola istruzione. -
MSTEST0053 : evitare
Assertparametri di formato. - MSTEST0058 : evitare asserzioni nei blocchi catch.