Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Property | Waarde |
|---|---|
| Regel-ID | MSTEST0081 |
| Title | [TestFilterProvider]' moet verwijzen naar een geldig testfiltertype |
| Categorie | Usage |
| Fix kan brekend of niet-brekend zijn | Non-breaking |
| standaard ingeschakeld | Yes |
| standaardniveau van ernst | Warning |
| geïntroduceerd in versie | 4.4.0 (preview) |
| Is er een oplossing voor de code | No |
Important
Deze analyzer is gepland voor MSTest 4.4 en is alleen beschikbaar in preview-versies totdat MSTest 4.4.0 wordt uitgebracht.
Oorzaak
[assembly: TestFilterProvider(typeof(MyFilter))] verwijst naar een type dat niet voldoet aan de vereisten die de adapter tijdens runtime afdwingt, of de assembly registreert meer dan één testfilterprovider.
Beschrijving van regel
[assembly: TestFilterProvider(typeof(MyFilter))] geeft het filtertype door als een Type, zodat de compiler alle typen accepteert. De adapter valideert het type alleen wanneer het filter wordt gerealiseerd en mislukt de hele uitvoering. Deze analyse rapporteert dezelfde problemen tijdens het bouwen, waar ze goedkoop zijn om op te lossen. Het type waarnaar wordt verwezen, moet:
- Niet-algemeen zijn.
- Kan worden geïnstantieerd, zodat het niet abstract, statisch, een interface of een byref-achtig type kan zijn.
- Voer
ITestFilteruit. - Declareer een openbare parameterloze constructor (elke struct voldoet al aan dit).
Maximaal één testfilterprovider kan per testassembly worden geregistreerd en het doorgeven van een expliciet null filtertype mislukt ook. Bij het instellen van .NET dwingt het algemene [assembly: TestFilterProvider<MyFilter>] formulier in plaats daarvan de interface- en constructorvereisten af via algemene beperkingen, dus alleen de controles van het algemene type en 'ten hoogste één provider' zijn nog steeds van toepassing.
[assembly: TestFilterProvider(typeof(MyFilter))]
public sealed class MyFilter : ITestFilter
{
public MyFilter(string mode) { } // Violation: no public parameterless constructor
public TestFilterResult Filter(TestFilterContext context) => TestFilterResult.Run;
}
Hoe schendingen op te lossen
Voeg een openbare parameterloze constructor toe of pas het type op een andere manier aan, zodat het niet-algemeen is, kan worden geïnstantieerd ITestFilter, geïmplementeerd en een openbare parameterloze constructor heeft.
public sealed class MyFilter : ITestFilter
{
public TestFilterResult Filter(TestFilterContext context) => TestFilterResult.Run;
}
Wanneer waarschuwingen onderdrukken
Onderdrukt geen waarschuwingen van deze regel. Een schending mislukt de hele testuitvoering tijdens runtime in plaats van alleen het filter zelf.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable MSTEST0081
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0081
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst ervan in op none in het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0081.severity = none
Zie Hoe u codeanalysewaarschuwingen kunt onderdrukken voor meer informatie.