Lingua

MSTEST0084: gli attributi di compatibilità della piattaforma devono essere coerenti con '[OSCondition]'

Proprietà Value
ID regola MSTEST0084
Titolo Gli attributi di compatibilità della piattaforma devono essere coerenti con [OSCondition]
Category Usage
La modifica è dirompente o non dirompente Non rompente
Abilitato per impostazione predefinita Sì
Gravità predefinita Informazioni
introdotta nella versione 4.5.0
È presente una correzione del codice Sì, solo per C#

Cause

Una classe o un metodo MSTest usa SupportedOSPlatformAttribute o UnsupportedOSPlatformAttribute, ma MSTest OSConditionAttribute non esprime una condizione compatibile del sistema operativo.

Descrizione della regola

Gli attributi di compatibilità della piattaforma informano l'analisi in fase di compilazione, ma non controllano se MSTest esegue un test. Senza un oggetto compatibile [OSCondition], un test può essere eseguito in un sistema operativo non supportato e non riesce prima di raggiungere il comportamento che intende verificare.

[TestMethod]
[SupportedOSPlatform("windows")]
public void UsesWindowsApi() { } // Violation

La regola tiene conto degli attributi di compatibilità della piattaforma nel test, nei relativi tipi contenenti e nel relativo assembly. Un [OSCondition] compatibile a livello di classe può soddisfare il requisito per un metodo di test. Se sia la classe sia il metodo dichiarano [OSCondition], le condizioni combinate devono corrispondere alla restrizione effettiva della piattaforma.

La regola confronta le famiglie del sistema operativo, non le versioni della piattaforma. Ad esempio, [SupportedOSPlatform("windows10.0")] richiede comunque una condizione per la famiglia di Windows, ma [OSCondition] non impone la versione minima di Windows. L'analizzatore non segnala restrizioni basate sulla versione [UnsupportedOSPlatform] perché l'esclusione di un'intera famiglia di sistemi operativi ignora anche le versioni supportate.

Come correggere le violazioni

Mantenere l'attributo di compatibilità della piattaforma per l'analisi delle API e aggiungere o aggiornare [OSCondition] in modo che MSTest ignori il test sulle famiglie di sistemi operativi non supportate.

[TestMethod]
[SupportedOSPlatform("windows")]
[OSCondition(OperatingSystems.Windows)]
public void UsesWindowsApi() { }

Una correzione del codice C# aggiunge o aggiorna [OSCondition] quando l'analizzatore può determinare una condizione compatibile. L'analizzatore segnala una diagnostica senza una correzione quando, ad esempio, la condizione a livello di classe di un metodo è in conflitto con i relativi attributi della piattaforma, la piattaforma non è rappresentata da OperatingSystemso gli attributi della piattaforma combinano restrizioni supportate e non supportate. Risolvere quei conflitti manualmente. Visual Basic segnala la diagnostica, ma non fornisce una correzione automatica.

Quando eliminare gli avvisi

Disattivare la regola quando un altro meccanismo garantisce che il test non possa essere eseguito su un sistema operativo incompatibile e che l'aggiunta dell'elemento [OSCondition] duplicherebbe tale criterio.

Eliminare un avviso

#pragma warning disable MSTEST0084
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0084

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità su none nel file di configurazione .

[*.{cs,vb}]
dotnet_diagnostic.MSTEST0084.severity = none

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Vedere anche