Regole di utilizzo di MSTest

Le regole di utilizzo supportano l'uso corretto di attributi, metodi e modelli MSTest. Queste regole rilevano errori comuni e assicurano che i test seguano i requisiti e le convenzioni del framework.

Regole in questa categoria

ID Regola Titolo Severity Correzione disponibile
MSTEST0002 La classe di test deve essere valida. Avvertimento Yes
MSTEST0003 Il metodo di test deve essere valido. Avviso → errore* Yes
MSTEST0005 TestContext deve essere valido. Avvertimento Yes
MSTEST0007 Utilizzare l'attributo nel metodo di prova. Avvertimento NO
MSTEST0008 TestInitialize deve essere valido. Avvertimento Yes
MSTEST0009 TestCleanup deve essere valido. Avvertimento Yes
MSTEST0010 ClassInitialize deve essere valido. Avvertimento Yes
MSTEST0011 ClassCleanup deve essere valido. Avvertimento Yes
MSTEST0012 AssemblyInitialize deve essere valido. Avvertimento Yes
MSTEST0013 AssemblyCleanup deve essere valido. Avvertimento Yes
MSTEST0014 DataRow deve essere valido. Avvertimento Yes
MSTEST0017 Gli argomenti di asserzione devono essere passati in ordine corretto. Informazioni Yes
MSTEST0018 DynamicData deve essere valido. Avvertimento Yes
MSTEST0023 Non negare l'asserzione booleana. Informazioni Yes
MSTEST0024 Non archiviare TestContext statico. Avvertimento NO
MSTEST0026 Gli argomenti di asserzione devono evitare l'accesso condizionale. Informazioni NO
MSTEST0030 Il tipo contenente il metodo di test deve essere una classe di test. Avvertimento Yes
MSTEST0031 Non usare System.ComponentModel.DescriptionAttribute. Informazioni Yes
MSTEST0032 Esaminare la condizione di asserto sempre vera. Informazioni NO
MSTEST0034 Usare `ClassCleanupBehavior.EndOfClass`. Informazioni Yes
MSTEST0035 Usare DeploymentItem con il metodo di test o la classe di test. Informazioni NO
MSTEST0037 Usare metodi di asserzione appropriati. Informazioni Yes
MSTEST0038 Evitare Assert.AreSame con i tipi valore. Informazioni Yes
MSTEST0039 Usare i metodi Assert.Throws più recenti. Informazioni Yes
MSTEST0040 Evitare di usare asserzioni nel contesto async void. Avvertimento NO
MSTEST0041 Usare attributi basati su condizioni con la classe di test. Avvertimento Yes
MSTEST0042 Duplicato DataRow. Avvertimento NO
MSTEST0043 Utilizzare l'attributo di retry nel metodo di test. Avviso → errore* Yes
MSTEST0046 Usare Assert anziché StringAssert. Informazioni Yes
MSTEST0048 Utilizzo delle proprietà TestContext. Avvertimento NO
MSTEST0049 Flow TestContext CancellationToken. Informazioni Yes
MSTEST0050 La fixture di test globale deve essere valida. Avvertimento Yes
MSTEST0051 Assert.Throws deve contenere una singola istruzione. Informazioni Yes
MSTEST0052 Evitare DynamicDataSourceType esplicite. Informazioni Yes
MSTEST0053 Evitare i parametri di formato Assert. Informazioni Yes
MSTEST0054 Utilizzare la proprietà CancellationToken. Informazioni Yes
MSTEST0055 Non ignorare il valore restituito del metodo stringa. Avvertimento NO
MSTEST0056 TestMethodAttribute deve impostare DisplayName correttamente. Informazioni Yes
MSTEST0057 TestMethodAttribute deve propagare le informazioni di origine. Avvertimento NO
MSTEST0058 Evitare di utilizzare asserzioni nei blocchi catch. Informazioni NO
MSTEST0059 Usare correttamente l'attributo Parallelize. Avvertimento NO
MSTEST0060 Duplicare TestMethodAttribute. Avvertimento Yes
MSTEST0061 Usare l'attributo OSCondition anziché il controllo di runtime. Informazioni Yes
MSTEST0062 Evitare i parametri del metodo di test con out/ref. Avvertimento Yes
MSTEST0063 La classe di test deve avere un costruttore valido. Avvertimento NO
MSTEST0064 Preferisce i metodi di asserzione asincrona. Informazioni NO
MSTEST0065 Evitare Assert.AreEqual nei tipi di collezione. Avvertimento NO
MSTEST0067 Evitare di bloccare in modo sincrono le chiamate nel codice di test. Informazioni (disabilitate per impostazione predefinita) NO
MSTEST0068 Usare Assert anziché CollectionAssert. Informazioni Yes
MSTEST0069 L'elemento ereditato [TestClass] viene ignorato dal generatore di codice sorgente MSTest. Avvertimento NO
MSTEST0070 [MemberCondition] gli argomenti devono essere validi. Avvertimento NO
MSTEST0071 Il metodo di test non deve specificare un nome visualizzato identico al proprio nome. Informazioni Yes
MSTEST0072 [AssemblyFixtureProvider] non è supportato con la compilazione anticipata. Avvertimento NO
MSTEST0073 Preferire una costante per la chiave di risorsa [ResourceLock]. Informazioni NO
MSTEST0074 Il test della modifica dello stato globale del processo deve dichiarare un blocco delle risorse. Informazioni Yes
MSTEST0075 Evitare di modificare la directory corrente in un test parallelizzato. Informazioni Yes
MSTEST0076 Evitare di modificare le impostazioni locali a livello di processo in un test parallelizzato. Informazioni NO
MSTEST0077 Evitare percorsi del file system codificati in modo fisso o condivisi in un test parallelizzato. Informazioni NO
MSTEST0078 [DependsOn] gli argomenti devono essere validi. Avvertimento NO
MSTEST0079 Usare l'attributo ArchitectureCondition anziché i controlli di runtime. Informazioni Yes
MSTEST0080 Usare l'attributo CICondition anziché i controlli dell'ambiente. Informazioni Yes
MSTEST0081 [TestFilterProvider] deve fare riferimento a un tipo di filtro di test valido. Avvertimento NO
MSTEST0082 Una classe di test eredita un ciclo di vita o un metodo di test da una versione MSTest diversa. Avvertimento NO
MSTEST0083 Usare [ExecutableCondition] anziché Process.Start verifiche prima di File.Exists. Informazioni Yes

* Elevato a Errore nelle modalità Recommended e All.

Scenari comuni

Convalida della struttura di test

Verificare che le classi, i metodi e le fixture di test siano conformi ai requisiti MSTest:

  • MSTEST0002: requisiti di layout della classe di test (ad esempio, pubblico, non statico).
  • MSTEST0003: requisiti di struttura del metodo di test (elevati a Errore).
  • MSTEST0030: i metodi con [TestMethod] devono trovarsi in [TestClass].
  • MSTEST0063: convalida del costruttore della classe di test.
  • MSTEST0069: applica direttamente [TestClass] in modo che l'individuazione generata dall'origine trovi la classe .
  • MSTEST0082: mantenere le classi di test di base e derivate nella stessa versione principale di MSTest.

Metodi relativi al ciclo di vita

Convalidare i metodi di inizializzazione e pulizia:

  • MSTEST0008: Convalida di TestInitialize.
  • MSTEST0009: Validazione TestCleanup.
  • MSTEST0010: ClasseInitialize convalida.
  • MSTEST0011: validazione ClassCleanup.
  • MSTEST0012: Validazione di AssemblyInitialize.
  • MSTEST0013: convalida assemblyCleanup.
  • MSTEST0034: Impostare il ClassCleanupBehavior.EndOfClass.
  • MSTEST0050: convalida della fixture di test globale.
  • MSTEST0072: non usare provider di fixture di assembly condivisi con compilazione anticipata.
  • MSTEST0082: ricompilare i metodi del ciclo di vita ereditati rispetto alla versione MSTest del progetto di test.

Test basati sui dati

Verificare che gli attributi dei dati vengano usati correttamente:

Scrittura di asserzioni migliori

Regole per l'utilizzo corretto ed efficace delle asserzioni:

  • MSTEST0017: passare il valore previsto/effettivo nell'ordine corretto.
  • MSTEST0023: non negare le condizioni (usare direttamente Assert.IsFalse).
  • MSTEST0026: evitare operatori condizionali null nelle asserzioni.
  • MSTEST0032: esaminare le condizioni invariabilmente vere.
  • MSTEST0037: usare il metodo assert più appropriato.
  • MSTEST0038: non usare AreSame con i tipi valore.
  • MSTEST0039: usare Assert.ThrowsExactly (API più recente).
  • MSTEST0046: Utilizzare Assert invece di StringAssert.
  • MSTEST0051: Assert.Throws deve testare una singola istruzione.
  • MSTEST0053: usare l'interpolazione di stringhe anziché i parametri di formato.
  • MSTEST0058: non inserire le asserzioni in blocchi catch.
  • MSTEST0064: Preferire i metodi di asserzione asincroni invece di bloccare il codice asincrono.
  • MSTEST0065: Evitare Assert.AreEqual sui tipi di raccolta.
  • MSTEST0068: preferisce Assert rispetto a CollectionAssert.

Utilizzo di TestContext

Utilizzo corretto dell'oggetto TestContext:

  • MSTEST0005: convalida delle proprietà TestContext.
  • MSTEST0024: non archiviare TestContext in campi statici.
  • MSTEST0048: accesso limitato alle proprietà nelle fixture.
  • MSTEST0049: token di annullamento del flusso da TestContext.
  • MSTEST0054: usare la proprietà TestContext.CancellationToken.

Modelli asincroni

Regole per il codice di test asincrono:

  • MSTEST0040: evitare asserzioni nei metodi void asincroni.
  • MSTEST0067: evitare Thread.Sleep, Task.Waite altre chiamate di blocco sincrono nel codice di test (consenso esplicito).

Sicurezza dei test paralleli

Regole per i test eseguiti in parallelo:

  • MSTEST0073: usare costanti condivise per le chiavi di blocco delle risorse.
  • MSTEST0074: blocca le mutazioni allo stato globale del processo.
  • MSTEST0075: blocca le modifiche della directory corrente.
  • MSTEST0076: Evitare modifiche delle impostazioni cultura a livello di processo.
  • MSTEST0077: evitare percorsi di file system condivisi.

Configurazione di test

  • MSTEST0031: usare gli attributi appropriati (non System.ComponentModel.Description).
  • MSTEST0035: utilizzo di DeploymentItem.
  • MSTEST0041: gli attributi della condizione devono essere nelle classi di test.
  • MSTEST0043: gli attributi di retry devono essere presenti nei metodi di test (⚠️ escalato a Errore).
  • MSTEST0055: non ignorare i valori restituiti dal metodo stringa.
  • MSTEST0056: impostare DisplayName correttamente in TestMethodAttribute.
  • MSTEST0057: Propagare le informazioni di origine nel TestMethodAttribute personalizzato.
  • MSTEST0059: non usare sia Parallelize che DoNotParallelize.
  • MSTEST0060: evitare TestMethodAttribute duplicati.
  • MSTEST0061: usare l'attributo OSCondition per i controlli della piattaforma.
  • MSTEST0070: [MemberCondition] gli argomenti devono fare riferimento a membri validi.
  • MSTEST0071: non impostare un nome visualizzato uguale al nome del metodo di test.
  • MSTEST0078: Convalida i target [DependsOn] e i grafi delle dipendenze.
  • MSTEST0079: usare ArchitectureCondition anziché i controlli dell'architettura di runtime.
  • MSTEST0080: usare CICondition anziché i controlli dell'ambiente.
  • MSTEST0081: convalidare le registrazioni del provider di filtri di test.
  • MSTEST0082: rilevare i test ereditati e i metodi del ciclo di vita compilati in base a un'altra versione principale di MSTest.
  • MSTEST0083: usare ExecutableCondition anziché un controllo eseguibile imperativo.