Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek popisuje pokročilé možnosti konfigurace pro MSTest.Sdk. Pro základní nastavení a začátek se podívejte na Get started with MSTest.
Důležité
Ve výchozím nastavení používá MSTest.Sdk spouštěč MSTest s MTP, včetně testu dotnet. To vyžaduje úpravu volání CI a místního rozhraní příkazového řádku a má vliv také na dostupné položky .runsettings. Staré integrace a nástroje můžete zachovat přepnutím na VSTest.
MsTest.Sdk ve výchozím nastavení nastaví EnableMSTestRunner i TestingPlatformDotnetTestSupport na hodnotu true. Další informace o testu dotnet a jeho různých režimech naleznete v tématu Testování pomocí testu dotnet.
Pomocné knihovny testovacího nástroje
Pokud project, která používá MSTest.Sdk, je určena jako pomocná knihovna testovacího nástroje a neobsahuje žádné spustitelné testy, project by měla mít <IsTestApplication>false</IsTestApplication>.
Vyberte běžce
Sada MSTest SDK ve výchozím nastavení spoléhá na MTP, ale můžete přepnout na VSTest přidáním vlastnosti <UseVSTest>true</UseVSTest>.
Rozšíření MTP
Prostředí MTP můžete přizpůsobit prostřednictvím sady rozšíření balíčků NuGet. Pro zjednodušení a zlepšení tohoto prostředí sada MSTest SDK zavádí dvě funkce:
Profil Microsoft.Testing.Platform
Koncept profiles umožňuje vybrat výchozí sadu konfigurací a rozšíření, která se použijí na testovací project.
Profil můžete nastavit pomocí vlastnosti TestingExtensionsProfile s jedním z následujících tří profilů:
None– Nejsou povolena žádná rozšíření.Default– Povolí doporučená rozšíření pro tuto verzi MSTest.SDK. Toto je výchozí nastavení, pokud vlastnost není explicitně nastavena.Povolí následující rozšíření:
- Pokrytí kódu
- Trx Zpráva
- sestava Azure DevOps (MSTest.Sdk 4.3.0+)
- Sestava GitHub Actions (experimentální a předběžná verze, MSTest.Sdk 4.3.0+)
AllMicrosoft- Povolí rozšíření Microsoftu vybraná pro široké použití ve výchozím nastavení, včetně rozšíření s omezující licencí. Experimentální rozšíření a rozšíření jen pro rozhraní API můžou nadále vyžadovat explicitní výslovný souhlas.Povolí všechna rozšíření z
Defaultprofilu a navíc následující rozšíření:- výpis chyb
- Fakes (MSTest.Sdk 3.7.0+)
- Výpis z přerušení
- Opětovné načítání za provozu
- Sestava HTML
- Opakovat
Ve verzích MSTest.Sdk 3.11.0 až 4.2.x je rozšíření Report pro Azure DevOps zahrnuto pouze v
AllMicrosoft.
Poznámka:
Profily odkazují na balíčky reportů Azure DevOps Report a GitHub Actions Report, ale generování reportů zůstává za běhu zakázané. Předejte --report-azdo, chcete-li povolit reportování Azure DevOps. Chcete-li povolit generování sestav v GitHub Actions, spusťte testy v GitHub Actions a předejte parametr --report-gh.
Tady je úplný příklad použití None profilu:
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
</Project>
| Rozšíření/profil | Žádný | Výchozí | AllMicrosoft |
|---|---|---|---|
| Pokrytí kódu | ✔️ | ✔️ | |
| výpis chyb | ✔️ | ||
| Falzifikáty | ✔️¹ | ||
| Výpis z přerušení | ✔️ | ||
| Opětovné načítání za provozu | ✔️ | ||
| Sestava HTML | ✔️ | ||
| Přehled GitHub Actions | ✔️³ | ✔️³ | |
| Opakovat | ✔️ | ||
| Trx | ✔️ | ✔️ | |
| Report Azure DevOps | ✔️³ | ✔️² |
¹ MSTest.Sdk 3.7.0+ ² MSTest.Sdk 3.11.0+ ³ MSTest.Sdk 4.3.0+
Povolení nebo zákaz rozšíření
Rozšíření lze povolit a zakázat pomocí vlastností nástroje MSBuild se vzorem Enable[NugetPackageNameWithoutDots].
Pokud chcete například povolit rozšíření výpisu stavu systému (balíček NuGet Microsoft. Testing.Extensions.CrashDump) můžete použít následující vlastnost EnableMicrosoftTestingExtensionsCrashDump nastavenou na true:
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>
</Project>
Seznam všech dostupných rozšíření najdete v tématu Funkce MTP.
Některá rozšíření MTP zůstávají volitelná a nejsou součástí profilů Default nebo AllMicrosoft:
- Od verze MSTest.Sdk 4.3 nastavte
<EnableMicrosoftTestingExtensionsJUnitReport>true</EnableMicrosoftTestingExtensionsJUnitReport>, pak předejte--report-junit. - Počínaje verzí MSTest.Sdk 4.4 Preview nastavte
<EnableMicrosoftTestingExtensionsCtrfReport>true</EnableMicrosoftTestingExtensionsCtrfReport>, potom předejte--report-ctrf. - Chcete-li odkazovat na rozšíření OpenTelemetry, nastavte
<EnableMicrosoftTestingExtensionsOpenTelemetry>true</EnableMicrosoftTestingExtensionsOpenTelemetry>. Vzhledem k tomu, že rozšíření vyžaduje konfiguraci rozhraní API, zaregistrujte ho ve vlastním vstupním bodu, jak je popsáno v OpenTelemetry.
Tato rozšíření jsou k dispozici pouze u MTP.
Varování
Je důležité si projít licenční podmínky pro každé rozšíření, protože se můžou lišit.
Povolená a zakázaná rozšíření se kombinují s rozšířeními poskytovanými vybraným profilem rozšíření.
Tento vzor vlastnosti lze použít k povolení dalšího rozšíření nad implicitním Default profilem (jak je vidět v předchozím příkladu CrashDumpExtension).
Můžete také zakázat rozšíření, které pochází z vybraného profilu. Například zakažte MS Code Coverage rozšíření nastavením <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>:
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
</PropertyGroup>
</Project>
V MSTest.Sdk verze 4.3.0 a novějších profil Default odkazuje na balíčky Azure DevOps Report a GitHub Actions Report. Chcete-li odebrat odkaz na balíček, nastavit <EnableMicrosoftTestingExtensionsAzureDevOpsReport>false</EnableMicrosoftTestingExtensionsAzureDevOpsReport> nebo <EnableMicrosoftTestingExtensionsGitHubActionsReport>false</EnableMicrosoftTestingExtensionsGitHubActionsReport>. Pokud zachováte odkazy na balíčky, Azure DevOps začne generovat sestavy pouze tehdy, když předáte --report-azdo. Generování sestav v GitHub Actions se spustí pouze tehdy, když testy spustíte v GitHub Actions a předáte --report-gh.
Funkce
Mimo výběru běžce a rozšíření specifických pro běžce poskytuje MSTest.Sdk také další funkce, které zjednodušují a vylepšují vaše zkušenosti s testováním.
Testování s využitím Aspire
Aspire je vyhraněný technologický stack připravený pro cloud určený k vytváření pozorovatelných, pro produkci připravených a distribuovaných aplikací. Aspire se dodává prostřednictvím kolekce balíčků NuGet, které zpracovávají konkrétní záležitosti určené pro cloud. Další informace najdete v Aspire dokumentaci.
Poznámka:
Tato funkce je dostupná z MSTest.Sdk 3.4.0.
Nastavením vlastnosti EnableAspireTestingtruemůžete přenést všechny závislosti a výchozí using direktivy, které potřebujete pro testování pomocí Aspire a MSTest.
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableAspireTesting>true</EnableAspireTesting>
</PropertyGroup>
</Project>
Test s Playwrightem
Playwright umožňuje spolehlivé komplexní testování pro moderní web apps. Další informace naleznete v oficiální dokumentaci Playwright.
Poznámka:
Tato funkce je dostupná z MSTest.Sdk 3.4.0.
Nastavením vlastnosti EnablePlaywrighttrue můžete přenést všechny závislosti a výchozí using direktivy, které potřebujete pro testování pomocí Playwright a MSTest.
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnablePlaywright>true</EnablePlaywright>
</PropertyGroup>
</Project>
Migrace na MSTest SDK
Zvažte následující kroky potřebné k migraci do sady MSTest SDK.
Aktualizace project
Při migraci existujícího testovacího projektu MSTest do sady MSTest SDK začněte nahrazením položky Sdk="Microsoft.NET.Sdk" v horní části testovacího projektu Sdk="MSTest.Sdk"
- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"
Přidejte verzi do global.json:
{
"msbuild-sdks": {
"MSTest.Sdk": "4.1.0"
}
}
Pak můžete začít zjednodušit project.
Odebrat výchozí vlastnosti:
- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>
Odebrat výchozí odkazy na balíčky:
- <PackageReference Include="MSTest"
- <PackageReference Include="MSTest.TestFramework"
- <PackageReference Include="MSTest.TestAdapter"
- <PackageReference Include="MSTest.Analyzers"
- <PackageReference Include="Microsoft.NET.Test.Sdk"
Nakonec na základě profilu rozšíření, který používáte, můžete některé balíčky Microsoft.Testing.Extensions.* odebrat.
Aktualizujte své CI
Po aktualizaci projektů, pokud používáte MTP (výchozí) a pokud se spoléháte na dotnet test spuštění testů, musíte aktualizovat konfiguraci CI. Další informace a vysvětlení všech požadovaných změn najdete v tématu integrace testů dotnet.
Pokud používáte režim VSTest dotnet test, tady je příklad aktualizace při použití úlohy DotNetCoreCLI v Azure DevOps:
Výchozí profil rozšíření MSTest.Sdk poskytuje balíčky Microsoft.Testing.Extensions.TrxReport a Microsoft.Testing.Extensions.CodeCoverage, které jsou vyžadované přidanými možnostmi. Pokud vyberete profil None, před použitím možností povolte obě rozšíření nebo na ně odkažte.
\- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '**/**.sln'
- arguments: '--configuration Release'
+ arguments: '--configuration Release -- --report-trx --results-directory $(Agent.TempDirectory) --coverage'
Generátor zdroje reflexe
Důležité
Následující chování MSTest 4.4 je k dispozici pouze v buildech Preview, dokud nebude vydána verze MSTest 4.4.0.
MSTest 4.3 zavedl generátor zdrojového kódu využívající reflexi v experimentálním balíčku MSTest.SourceGeneration, který má nezávislé verzování. Od verze MSTest 4.4 balíček přestává být experimentální a přechází na verzování MSTest.
Nativní projekty AOT zahrnují zdrojový generátor automaticky. Pro projekt, který nepoužívá NativeAOT a používá MSTest.Sdk, to povolte pomocí <EnableMSTestSourceGeneration>true</EnableMSTestSourceGeneration>. MSTest.Sdk sjednocuje verze MSTest.SourceGeneration, MSTest.TestFramework a MSTest.TestAdapter pomocí MSTestVersion.
Sada SDK také podporuje generování zdrojů v opakovaně použitelných testovacích knihovnách a projektech, které používají správu centrálních balíčků. Poskytuje odpovídající MSTest.TestAdapter háky modulu runtime a generuje požadované PackageVersion položky.
.NET Standard nepodporuje tyto háky modulu runtime. Když povolíte generování zdroje pro cíl .NET Standard, sada SDK hlásí tuto chybu:
Generování zdroje MSTest není podporováno pro cílové architektury .NET Standard, protože požadované háky modulu runtime MSTest.TestAdapter nejsou k dispozici.
Zdrojový generátor zjišťuje testy v době kompilace. Pokud je generátor aktivní, testovací třídy musí deklarovat [TestClass] přímo, místo toho, aby ji dědily. Analyzátor MSTEST0069 označuje třídy, které spoléhají na zděděný [TestClass].
Počínaje verzí MSTest 4.3.2 MSTestSourceGenMode se ve výchozím nastavení ReflectionFree nastaví pro oříznuté a nativní projekty AOT. Tento režim používá vygenerovaná metadata a vyvolávače, pokud podporuje danou podobu testu. V běhových prostředích, která podporují reflexi, používá MSTest jako záložní mechanismus reflexi pro nepodporované nebo chybějící generované položky.
Počínaje verzí MSTest 4.4 bezreflexní generování vytváří úplná metadata zděděných atributů, včetně AttributeUsage a AllowMultiple. V MTP může obejít zjišťování a ověřování za běhu pro prosté synchronní [TestMethod] a [DataRow] metody. Asynchronní testy, atributy vlastní metody testování, DynamicDatavlastní ITestDataSource implementace a nejednoznačné obrazce testů používají záložní cestu. VSTest si také zachová stávající cestu.
Režim bez reflexe hlásí tyto diagnostické informace:
| ID | Nepodporovaný obrazec testu |
|---|---|
AOTSG0001 |
Statická testovací třída |
AOTSG0002 |
Otevřená generická testovací třída, včetně třídy vnořené do generického typu |
AOTSG0003 |
Třída, ke které vygenerovaný kód nemá přístup, včetně třídy lokální pro soubor nebo vnořené třídy s modifikátorem private nebo private protected |
AOTSG0004 |
Obecná testovací metoda |
AOTSG0005 |
Testovací metoda s parametrem in, out nebo ref |
Experimentální funkce
Následující funkce MSTest 4.3 jsou experimentální. Jejich veřejná rozhraní API se mohou měnit a jsou zpřístupněna prostřednictvím experimentální diagnostiky. Pokud se chcete přihlásit, potvrďte odpovídající ID diagnostiky.
Programové filtrování testů pomocí ITestFilter
Poznámka:
Představeno v MSTest 4.3.0 (experimentální).
Experimentální bod rozšíření ITestFilter, registrovaný pomocí [TestFilterProviderAttribute], umožňuje programově určit, zda se jednotlivé testy spustí, ještě před načtením jakékoli testovací třídy. To je užitečné pro vlastní logiku výběru, kterou nelze vyjádřit pomocí filtrů příkazového řádku.
Implementujte ITestFilter.Filter(TestFilterContext) kontrolu metadat bez načtení testovací třídy:
public sealed class MyFilter : ITestFilter
{
public TestFilterResult Filter(TestFilterContext context) =>
context.DisplayName.Contains("Nightly", StringComparison.Ordinal)
? TestFilterResult.Run : TestFilterResult.Drop;
}
Stiskněte TestFilterResult.Run pro spuštění testu, Drop pro jeho vynechání bez výsledku nebo Skip(reason) pro nahlášení výsledku jako přeskočeného. MSTest může souběžně volat tutéž instanci filtru, takže implementace musí být vláknově bezpečné. Příkazový řádek a filtry průzkumníka testů se spouštějí před ITestFilter, zatímco [Ignore] se následně vyhodnocují.
Počínaje verzí MSTest 4.4 mohou projekty .NET používat obecný, typově bezpečný tvar registrace [assembly: TestFilterProvider<MyFilter>]. Kompilátor pak zajišťuje, že MyFilter implementuje ITestFilter a má veřejný bezparametrový konstruktor. Obecný atribut není k dispozici pro .NET Framework. U projektu s více cíli vyberte obecný nebo ne generický formulář se symbolem preprocesoru cílové architektury.
#if NET
[assembly: TestFilterProvider<MyFilter>]
#else
[assembly: TestFilterProvider(typeof(MyFilter))]
#endif
Počínaje verzí MSTest 4.4 analyzátor MSTEST0081 plně ověří ne generický registrační formulář. Pro obecný formulář stále hlásí obecné typy filtrů a sestavení, které registrují více než jednoho zprostředkovatele.
TestRun.Current a plánované testy
Poznámka:
Představeno v MSTest 4.3.0 (experimentální).
Experimentální rozhraní API TestRun.Current (z RFC 014) zpřístupňuje informace o aktuálním běhu, včetně sady plánovaných testů, takže rozšíření a fixtury mohou zjistit, co je naplánováno k provedení.
Známá omezení
MSBuild SDK poskytované NuGetem (včetně MSTest.Sdk) mají omezenou podporu nástrojů pro aktualizaci verze, to znamená, že obvyklá aktualizace NuGet a uživatelské rozhraní Visual Studio pro správu balíčků NuGet nefunguje podle očekávání. Verzi budete muset aktualizovat ručně v souboru global.json a v souboru project. (To platí i v případě, že používáte Dependabot kvůli problémům dependabot-core#12824 a dependabot-core#8615.)