MSTest SDK-konfiguráció

Ez a cikk az MSTest.Sdk speciális konfigurációs lehetőségeit ismerteti. Az alapvető beállításokhoz és az induláshoz tekintse meg az MSTest oldalát: Get started with MSTest.

Fontos

Az MSTest.Sdk alapértelmezés szerint az MTP-vel rendelkező MSTest-futót használja, beleértve a dotnet-teszteket is. Ehhez módosítani kell a CI-t és a helyi CLI-hívásokat, és hatással van a .runsettings elérhető bejegyzéseire is. A régi integrációkat és eszközöket megtarthatja a VSTestre való váltással.

Az MSTest.Sdk alapértelmezés szerint igaz értékre állítja.EnableMSTestRunnerTestingPlatformDotnetTestSupport A dotnet-tesztről és a különböző módokról további információt a Dotnet-teszttel végzett tesztelés című témakörben talál.

Segédkódtárak tesztelése

Ha az MSTest.Sdk-t használó project egy teszt segédprogram segédkönyvtárának szánták, és önmagában nem tartalmaz futtatható teszteket, a project <IsTestApplication>false</IsTestApplication> kell rendelkeznie.

Válassza ki a futót

Alapértelmezés szerint az MSTest SDK az MTP-re támaszkodik, de a tulajdonság hozzáadásával átválthat <UseVSTest>true</UseVSTest>-re.

MTP kiterjesztése

Az MTP-élményt NuGet-csomagbővítmények halmazával szabhatja testre. A felhasználói élmény egyszerűsítése és javítása érdekében az MSTest SDK két funkciót vezet be:

Microsoft. Testing.Platform profil

A profilok lehetővé teszi a teszt project alkalmazni kívánt konfigurációk és bővítmények alapértelmezett készletének kiválasztását.

A profilt a következő három profil egyikével állíthatja be a tulajdonsággal TestingExtensionsProfile :

  • None - Nincs engedélyezve bővítmény.

  • Default – Engedélyezi az MSTest.SDK ezen verziójához javasolt bővítményeket. Ez az alapértelmezett érték, ha a tulajdonság nincs explicit módon beállítva.

    Engedélyezi a következő bővítményeket:

  • AllMicrosoft– Lehetővé teszi a Microsoft széles körű használatra kiválasztott bővítményeket, beleértve a korlátozó licenccel rendelkező bővítményeket is. A csak kísérleti és API-s bővítményekhez továbbra is szükség lehet explicit jóváhagyásra.

    Engedélyezi a Default profil összes bővítményét, valamint a következő bővítményeket:

    Az MSTest.Sdk 3.11.0-tól 4.2.x-ig terjedő verzióiban az Azure DevOps Jelentéskészítő bővítmény csak a AllMicrosoft része.

Feljegyzés

A profilok a Azure DevOps jelentésre és GitHub Actions jelentéscsomagra hivatkoznak, de a jelentés futásidőben le van tiltva. Pass --report-azdo a Azure DevOps jelentés engedélyezéséhez. A GitHub Actions-jelentéskészítés engedélyezéséhez futtassa a teszteket a GitHub Actions használatával, és adja meg a --report-gh paramétert.

Íme egy teljes példa a None profil használatával:

<Project Sdk="MSTest.Sdk/4.1.0">

    <PropertyGroup>
        <TargetFramework>net10.0</TargetFramework>
        <TestingExtensionsProfile>None</TestingExtensionsProfile>
    </PropertyGroup>

</Project>
Bővítmény/profil Egyik sem Alapértelmezett AllMicrosoft
Kódlefedettség ✔️ ✔️
Hibakép ✔️
Hamisítványok ✔️¹
lefagyás állapotmentése ✔️
Hot Reload ✔️
HTML-jelentés ✔️
GitHub Actions jelentés ✔️³ ✔️³
Újrapróbálkozás ✔️
Trx ✔️ ✔️
Azure DevOps jelentés ✔️³ ✔️²

¹ MSTest.Sdk 3.7.0+ ² MSTest.Sdk 3.11.0+ ³ MSTest.Sdk 4.3.0+

Bővítmények engedélyezése vagy letiltása

A bővítményeket az MSBuild tulajdonságok a mintával Enable[NugetPackageNameWithoutDots]engedélyezhetik és tilthatják le.

Például az összeomlási memóriakép bővítmény engedélyezéséhez (NuGet-csomag Microsoft. Testing.Extensions.CrashDump) az alábbi EnableMicrosoftTestingExtensionsCrashDump tulajdonságot true értékre állíthatja:

<Project Sdk="MSTest.Sdk/4.1.0">

<PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>

</Project>

Az összes elérhető bővítmény listáját az MTP-funkciók között találja.

Egyes MTP-bővítmények továbbra is választhatók, és nem szerepelnek a AllMicrosoft vagy Default profilokban:

  • Az MSTest.Sdk 4.3-tól kezdve állítsa be <EnableMicrosoftTestingExtensionsJUnitReport>true</EnableMicrosoftTestingExtensionsJUnitReport>, majd adja meg --report-junit.
  • Az MSTest.Sdk 4.4 előzetes verziójától kezdve állítsa be <EnableMicrosoftTestingExtensionsCtrfReport>true</EnableMicrosoftTestingExtensionsCtrfReport>, majd adja át a --report-ctrf értéket.
  • Az OpenTelemetry bővítményre való hivatkozáshoz állítsa be a következőt <EnableMicrosoftTestingExtensionsOpenTelemetry>true</EnableMicrosoftTestingExtensionsOpenTelemetry>: Mivel a bővítmény API-konfigurációt igényel, regisztrálja az egyéni belépési ponton az OpenTelemetryben leírtak szerint.

Ezek a bővítmények csak MTP-vel érhetők el.

Figyelmeztetés

Fontos áttekinteni az egyes bővítmények licencfeltételeit, mivel ezek eltérőek lehetnek.

Az engedélyezett és a letiltott bővítmények a kiválasztott bővítményprofil által biztosított bővítményekkel vannak kombinálva.

Ez a tulajdonságminta egy további bővítmény engedélyezésére használható az implicit Default profilon (ahogy az előző CrashDumpExtension-példában is látható).

A kijelölt profilból származó bővítményeket is letilthatja. Például tiltsa le a MS Code Coverage kiterjesztést a következő beállítással <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>.

<Project Sdk="MSTest.Sdk/4.1.0">

    <PropertyGroup>
        <TargetFramework>net10.0</TargetFramework>
        <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
    </PropertyGroup>

</Project>

Az MSTest.Sdk 4.3.0-s és újabb verzióiban a Default profil a Azure DevOps jelentés- és GitHub Actions jelentéscsomagokra hivatkozik. Bármelyik csomaghivatkozás eltávolításához állítsa be a(z) <EnableMicrosoftTestingExtensionsAzureDevOpsReport>false</EnableMicrosoftTestingExtensionsAzureDevOpsReport> vagy <EnableMicrosoftTestingExtensionsGitHubActionsReport>false</EnableMicrosoftTestingExtensionsGitHubActionsReport> értéket. Ha megtartja a csomaghivatkozásokat, az Azure DevOps jelentéskészítése csak akkor kezdődik el, amikor átadja a --report-azdo elemet. A GitHub Actions jelentéskészítése csak akkor indul el, ha a teszteket a GitHub Actionsban futtatja, és megadja a --report-gh értéket.

Funkciók

A futó és a futóspecifikus bővítmények kiválasztásán kívül további funkciókat is biztosít a MSTest.Sdk tesztelési élmény leegyszerűsítéséhez és javításához.

Tesztelés a Aspire

Aspire egy cloud-ready stack, amely magába foglalja az elosztott, megfigyelhető, éles üzemre kész alkalmazások felépítéséhez szükséges véleményvezérelt eszközkészletet. Aspire a NuGet-csomagok gyűjteményén keresztül érkezik, amelyek bizonyos felhő-natív szempontokat kezelnek. További információkért tekintse meg a Aspire dokumentumokat.

Feljegyzés

Ez a funkció az MSTest.Sdk 3.4.0-s verzióban érhető el.

A tulajdonság EnableAspireTesting értékének true-re állításával behozhatja az összes szükséges függőséget és alapértelmezett using direktívát a teszteléshez a Aspire és MSTest használatával.

<Project Sdk="MSTest.Sdk/4.1.0">

    <PropertyGroup>
        <TargetFramework>net10.0</TargetFramework>
        <EnableAspireTesting>true</EnableAspireTesting>
    </PropertyGroup>

</Project>

Teszt forgatókönyvíróval

A Playwright megbízható, végpontok közötti tesztelést tesz lehetővé a modern webalkalmazások számára. További információkért lásd a hivatalos drámaíró dokumentációját.

Feljegyzés

Ez a funkció az MSTest.Sdk 3.4.0-s verzióban érhető el.

Ha beállítja a EnablePlaywright tulajdonságot true-re, behozhatja az összes függőséget és az alapértelmezett using irányelveket, amelyek szükségesek a Playwright és a MSTest teszteléséhez.

<Project Sdk="MSTest.Sdk/4.1.0">

    <PropertyGroup>
        <TargetFramework>net10.0</TargetFramework>
        <EnablePlaywright>true</EnablePlaywright>
    </PropertyGroup>

</Project>

Migrálás AZ MSTest SDK-ba

Vegye figyelembe az alábbi lépéseket az MSTest SDK-ba való migráláshoz.

A project frissítése

Meglévő MSTest-tesztprojekt MSTest SDK-ba való migrálásakor először cserélje le a tesztprojekt tetején található Sdk="Microsoft.NET.Sdk" bejegyzést Sdk="MSTest.Sdk"

- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"

Adja hozzá a verziót a global.json-hez:

{
    "msbuild-sdks": {
        "MSTest.Sdk": "4.1.0"
    }
}

Ezután elkezdheti egyszerűsíteni a project.

Alapértelmezett tulajdonságok eltávolítása:

- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>

Az alapértelmezett csomaghivatkozások eltávolítása:

- <PackageReference Include="MSTest"
- <PackageReference Include="MSTest.TestFramework"
- <PackageReference Include="MSTest.TestAdapter"
- <PackageReference Include="MSTest.Analyzers"
- <PackageReference Include="Microsoft.NET.Test.Sdk"

Végül a használt bővítményprofil alapján eltávolíthat néhány Microsoft.Testing.Extensions.* csomagot is.

Frissítse a saját CI-jét

Miután frissítette a projekteket, ha MTP-t használ (alapértelmezett), és ha a tesztek futtatására dotnet test támaszkodik, frissítenie kell a CI-konfigurációt. További információkért és az összes szükséges módosítás megértéséhez tekintse meg a dotnet tesztintegrációját.

Ha a dotnet test VSTest üzemmódját használja, íme egy példa a DotNetCoreCLI feladatot az Azure DevOps-ban történő használatakor:

Az alapértelmezett MSTest.Sdk bővítményprofil biztosítja a hozzáadott beállításokhoz szükséges Microsoft.Testing.Extensions.TrxReport és Microsoft.Testing.Extensions.CodeCoverage csomagokat. Ha kiválasztja a profilt None , engedélyezze vagy hivatkozzon mindkét bővítményre a beállítások használata előtt.

\- task: DotNetCoreCLI@2
  inputs:
    command: 'test'
    projects: '**/**.sln'
-    arguments: '--configuration Release'
+    arguments: '--configuration Release -- --report-trx --results-directory $(Agent.TempDirectory) --coverage'

Kísérleti funkciók

A következő MSTest 4.3-funkciók kísérleti jellegűek. A nyilvános API-k változhatnak, és kísérleti diagnosztikák mögött jelennek meg, ezért a jóváhagyáshoz el kell ismernie a megfelelő diagnosztikai azonosítót. Ezt a fenntartást szem előtt tartva használja őket.

Tükröződési forrásgenerátor

Feljegyzés

Bevezetés az MSTest 4.3.0-s (kísérleti) verzióba.

Az MSTest reflexiós forrásgenerátor fordítási időben felderíti a teszteket ahelyett, hogy futásidejű reflexióra támaszkodna, így a tesztprojektek kompatibilisek a kódlevágással és a Native AOT-val. Engedélyezze az MSTest.SourceGeneration csomag hozzáadásával. Ha a forrásgenerátor aktív, a tesztosztályoknak közvetlenül kell deklarálniuk [TestClass] , nem pedig örökölniük; az MSTEST0069 elemző az örökölt [TestClass]osztályokra támaszkodó osztályokat jelöli.

Az MSTest 4.3.2-től kezdve a trimmelt és natív AOT-projektek esetében a(z) MSTestSourceGenMode alapértelmezett értéke ReflectionFree.

Az MSTest 4.4-től kezdve a reflexiómentes kódgenerálás létrehozza az örökölt attribútumok teljes metaadatait, beleértve a AttributeUsage és AllowMultiple attribútumokat. Ha a generátor nem tudja statikusan előállítani a metaadatokat, az MSTest a reflexió használatára tér vissza, ha a futtatókörnyezet támogatja.

Programozott tesztszűrés ITestFilter használatával

Feljegyzés

Bevezetés az MSTest 4.3.0-s (kísérleti) verzióba.

A ITestFilter használatával regisztrált kísérleti [TestFilterProviderAttribute] bővítési pont lehetővé teszi, hogy programból eldöntse, lefusson-e az egyes tesztek mindegyike, még mielőtt bármelyik tesztosztály betöltődne. Ez olyan egyéni kijelölési logika esetén hasznos, amely parancssori szűrőkkel nem fejezhető ki.

A metaadatok vizsgálatához implementálja a(z) ITestFilter.Filter(TestFilterContext) elemet a tesztosztály betöltése nélkül:

public sealed class MyFilter : ITestFilter
{
    public TestFilterResult Filter(TestFilterContext context) =>
        context.DisplayName.Contains("Nightly", StringComparison.Ordinal)
            ? TestFilterResult.Run : TestFilterResult.Drop;
}

Térjen vissza TestFilterResult.Run a teszt futtatásához, Drop az eredmény nélküli kihagyásához vagy Skip(reason) a kihagyott eredmény jelentéséhez. Az MSTest egyszerre hívhat meg egy szűrőpéldányt, így a implementációknak szálbiztosnak kell lenniük. A parancssori és a teszt-explorer szűrői a ITestFilter előtt futnak le, míg a [Ignore] kiértékelése ezután történik.

Az MSTest 4.4-től kezdve .NET projektek használhatják az általános, típusbiztos regisztrációs űrlapot[assembly: TestFilterProvider<MyFilter>]. A fordító ezután biztosítja, hogy a(z) MyFilter megvalósítsa a(z) ITestFilter-t, és hogy nyilvános, paraméter nélküli konstruktorral rendelkezzen. Az általános attribútum nem érhető el .NET-keretrendszerhez. Több célzott projekt esetén válassza ki az általános vagy nem általános űrlapot egy target-framework előfeldolgozási szimbólummal.

#if NET
[assembly: TestFilterProvider<MyFilter>]
#else
[assembly: TestFilterProvider(typeof(MyFilter))]
#endif

Az MSTest 4.4-től kezdve a MSTEST0081 elemző teljes mértékben ellenőrzi a nem általános regisztrációs űrlapot. A generikus forma esetében továbbra is jelzi azokat a generikus szűrőtípusokat és szerelvényeket, amelyek egynél több szolgáltatót regisztrálnak.

TestRun.Current és tervezett tesztek

Feljegyzés

Bevezetés az MSTest 4.3.0-s (kísérleti) verzióba.

A kísérleti TestRun.Current API (az RFC 014-ből) információkat tesz közzé az aktuális futtatásról, beleértve a tervezett tesztek készletét is, így a bővítmények és a fixtúrák megvizsgálhatják az ütemezett végrehajtást.

Ismert korlátozások

A NuGet által biztosított MSBuild SDK-k (beleértve az MSTest.Sdk-t is) tagolt eszközkészlet-támogatással rendelkeznek a verzió frissítésekor, ami azt jelenti, hogy a Szokásos NuGet-frissítés és a NuGet-csomagok kezelésére szolgáló Visual Studio felhasználói felület nem a várt módon működik. A verziót manuálisan kell frissítenie a global.json fájlban és a project fájlban. (Ez akkor is érvényes, ha a Dependabotot dependabot-core#12824 és dependabot-core#8615 problémák miatt használja.)

Lásd még