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.
| Proprietà | Value |
|---|---|
| ID della regola | MSTEST0070 |
| Titolo | Gli argomenti [MemberCondition] devono essere validi |
| Categoria | Usage |
| La modifica è dirompente o non dirompente | Non-breaking |
| Abilitato per impostazione predefinita | Sì |
| Gravità predefinita | Avvertimento |
| introdotta nella versione | 4.3.0 |
| È presente una correzione del codice | No |
Cause
Un [MemberCondition] attributo fa riferimento a un membro che il framework di test non può valutare. Il membro a cui si fa riferimento deve esistere nel tipo a cui si fa riferimento, essere public static, restituire boole (per i metodi) essere senza parametri.
Descrizione regola
L'attributo [MemberCondition] viene eseguito in modo condizionale o ignora una classe di test o un metodo di test in base al valore di uno o più membri statici bool . Si fa riferimento a ogni membro in base al tipo e al nome dichiarativi, ad esempio [MemberCondition(typeof(MyConditions), nameof(MyConditions.IsEnabled))].
Poiché si fa riferimento al membro per nome, il framework di test lo risolve tramite riflessione in fase di esecuzione. Se il membro non esiste, non è public, non è static, non restituisce bool, richiede parametri o è una proprietà di sola scrittura, la valutazione della condizione genera un'eccezione di tipo InvalidOperationException e il test ha esito negativo. Questo analizzatore espone tali problemi in fase di compilazione in modo che gli errori di digitazione e refactoring non interrompano automaticamente il controllo dei test.
La regola segnala una violazione quando un membro a cui si fa riferimento:
- Non è possibile trovare il tipo a cui si fa riferimento.
- Non è
public. - Non è
static. - Non è una proprietà, un campo o un metodo senza parametri.
- Non restituisce
bool. - Metodo che dichiara i parametri.
- È una proprietà senza getter.
public class TestConditions
{
public static bool IsEnabled => true;
private static bool IsHidden => true; // not public
public bool IsInstance => true; // not static
public static int Count => 0; // wrong return type
public static bool IsReady(string mode) => true; // has parameters
}
[TestClass]
public class MyTestClass
{
[TestMethod]
[MemberCondition(typeof(TestConditions), "IsEnable")] // Violation - member not found (typo)
public void Test1()
{
}
[TestMethod]
[MemberCondition(typeof(TestConditions), nameof(TestConditions.IsInstance))] // Violation - not static
public void Test2()
{
}
[TestMethod]
[MemberCondition(typeof(TestConditions), nameof(TestConditions.Count))] // Violation - doesn't return bool
public void Test3()
{
}
}
Come correggere le violazioni
Fare riferimento a un membro che è public static, restituisce boole (per i metodi) è senza parametri. Correggere il nome del membro se si tratta di un errore di ortografia o modificare la dichiarazione del membro in modo che soddisfi i requisiti.
public class TestConditions
{
public static bool IsEnabled => true;
}
[TestClass]
public class MyTestClass
{
[TestMethod]
[MemberCondition(typeof(TestConditions), nameof(TestConditions.IsEnabled))]
public void Test1()
{
}
}
Usare nameof invece di un valore letterale stringa in modo che il compilatore e questa regola mantengano il riferimento sincronizzato quando si rinomina il membro.
È anche possibile fare riferimento a un campo o a un metodo senza parametri, combinare diversi membri (combinati con AND) e usare ConditionMode per invertire la condizione:
[TestMethod]
[MemberCondition(
typeof(TestConditions),
nameof(TestConditions.IsEnabled),
nameof(TestConditions.IsSupported))] // runs only when both are true
public void Test2()
{
}
[TestMethod]
[MemberCondition(ConditionMode.Exclude, typeof(TestConditions), nameof(TestConditions.IsLegacy))] // skipped when true
public void Test3()
{
}
Quando eliminare gli avvisi
Non eliminare gli avvisi da questa regola. Un attributo [MemberCondition] che fa riferimento a un membro non valido genera un'eccezione in fase di esecuzione e fa sì che il test non riesca invece di valutare la condizione.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable MSTEST0070
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0070
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.MSTEST0070.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.