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.
MSTest, Microsoft Testing Framework, je testovací rozhraní pro aplikace .NET. Umožňuje psát a spouštět testy a poskytovat testovací sady s integrací do Průzkumníků testů visual Studio a Visual Studio Code, rozhraní příkazového řádku .NET a mnoha kanálů CI.
MSTest je plně podporovaná opensourcová a multiplatformní testovací architektura, která funguje se všemi podporovanými cíli .NET (.NET Framework, .NET Core, .NET, UPW, WinUI atd.) hostovanými na GitHubu.
Nastavení spuštění
Soubor .runsettings lze použít ke konfiguraci způsobu spouštění testů jednotek. Další informace o runsettings a konfiguracích souvisejících s platformou najdete v dokumentaci k runsettings VSTest nebo dokumentaci k runsettings MSTest runneru.
MSTest, element
Následující položky runsettings umožňují nakonfigurovat, jak se MSTest chová.
| Konfigurace | Výchozí | Hodnoty |
|---|---|---|
AssemblyCleanupTimeout |
Žádný | Globálně určete časový limit, který se má použít pro každou instanci metody čištění sestavení.
[Timeout] atribut zadaný v metodě vyčištění sestavení přepíše globální časový limit. |
AssemblyInitializeTimeout |
Žádný | Zadejte globálně časový limit, který se má použít pro každou instanci metody inicializace sestavení.
[Timeout] atribut zadaný v metodě inicializace sestavení přepíše globální časový limit. |
AssemblyResolution |
nepravdivý | Při hledání a spouštění testů jednotek můžete určit cesty k dalším sestavením. Tyto cesty použijte například pro sestavení závislostí, která nejsou ve stejném adresáři jako testovací sestavení. Chcete-li zadat cestu, použijte prvek Cesta adresáře. Cesty můžou zahrnovat proměnné prostředí.<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution>Tato funkce se použije pouze při použití cíle rozhraní .NET Framework. |
CaptureTraceOutput |
Result |
Zachyťte text z Console.Write*rozhraní API a Trace.Write*Debug.Write* rozhraní API a přidružte ho k aktuálnímu testu. Počínaje verzí MSTest 4.4, použijte None, Resultnebo Live.
Live také ozvěna Console, Tracea TestContext.Write* výstup do konzoly během testovacího běhu. Dřívější logické hodnoty zůstávají podporovány: true mapuje na Resulta false mapuje na None. |
ClassCleanupLifecycle |
EndOfClass | Chcete-li, aby se vyčištění třídy provedlo na konci procesu sestavení, nastavte ji na EndOfAssembly. (Od MSTest v4 se už nepodporuje, protože EndOfClass se jedná o výchozí a pouze chování ClassCleanup ) |
ClassCleanupTimeout |
Žádný | Zadejte globálně časový limit, který se má použít pro každou instanci metody úklidu třídy.
[Timeout] atribut zadaný v metodě vyčištění třídy přepíše časový limit platný globálně. |
ClassInitializeTimeout |
Žádný | Zadejte globálně časový limit, který se má použít pro každou instanci metody inicializace třídy.
[Timeout] atribut zadaný v metodě inicializace třídy přepíše globální časový limit. |
ConsiderFixturesAsSpecialTests |
nepravdivý | Chcete-li zobrazit AssemblyInitialize, AssemblyCleanup, ClassInitialize a ClassCleanup jako samostatné položky v sadě Visual Studio a Visual Studio Code, Test Explorer a .trx log nastavte tuto hodnotu na true |
DeleteDeploymentDirectoryAfterTestRunIsComplete |
pravda | Pokud chcete zachovat adresář nasazení po testovacím spuštění, nastavte tuto hodnotu na false. |
DeploymentEnabled |
pravda | Pokud nastavíte hodnotu na false, položky nasazení, které zadáte v testovací metodě, se do adresáře nasazení nekopírují. |
DeployTestSourceDependencies |
pravda | Hodnota označující, zda mají být nasazeny odkazy na zdroj testů. |
EnableBaseClassTestMethodsFromOtherAssemblies |
pravda | Hodnota určující, zda povolit zjišťování testovacích metod ze základních tříd v jiném sestavení než odvozená testovací třída. |
ForcedLegacyMode |
nepravdivý | Ve starších verzích sady Visual Studio byl adaptér MSTest optimalizovaný tak, aby byl rychlejší a škálovatelný. Některé rysy chování sady, jako například pořadí, ve kterém jsou testy spuštěny, nemusí být přesně stejné jako v předchozích edicích sady Visual Studio. Nastavte hodnotu na true, abyste použili starší testovací adaptér. Toto nastavení můžete použít například v případě, že máte soubor app.config určený pro test jednotek. Doporučujeme, abyste zvážili refaktoring svých testů, abyste mohli použít novější adaptér. |
GlobalTestCleanupTimeout |
TestCleanupTimeout |
Počínaje msTest 4.4 zadejte časový limit pro každou globální metodu čištění testů. Pokud tuto položku vynecháte, MSTest použije TestCleanupTimeout. Atribut [Timeout] metody přepíše obě hodnoty. |
GlobalTestInitializeTimeout |
TestInitializeTimeout |
Počínaje msTest 4.4 zadejte časový limit pro každou globální metodu inicializace testu. Pokud tuto položku vynecháte, MSTest použije TestInitializeTimeout. Atribut [Timeout] metody přepíše obě hodnoty. |
LaunchDebuggerOnTestFailure |
nepravdivý | Od verze MSTest 4.2 platí, že pokud je nastaveno na true, MSTest spustí ladicí program, když test selže. |
MapInconclusiveToFailed |
nepravdivý | Pokud se test dokončí s nejasným stavem, mapuje se na vynechaný stav v Test Explorer. Pokud chcete, aby se nejasné testy zobrazovaly jako neúspěšné, nastavte hodnotu na true. |
MapNotRunnableToFailed |
pravda | Hodnota označující, zda neproveditelný výsledek je mapován na neúspěšný test. |
OrderTestsByNameInClass |
nepravdivý | Pokud chcete spustit testy podle názvů testů v Průzkumníkech testů i na příkazovém řádku, nastavte tuto hodnotu na true. |
Parallelize |
Slouží k nastavení paralelizace:Workers: Počet vláken/pracovních procesů, které se mají použít pro paralelizaci, což je ve výchozím nastavení počet procesorů na aktuálním počítači.Scope: Rozsah paralelizace. Můžete ho nastavit na MethodLevel. Ve výchozím nastavení je to ClassLevel.<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize> |
|
RandomizeTestOrder |
nepravdivý | Počínaje verzí MSTest 4.3 nastavte tuto hodnotu na true pro spouštění testů v náhodném pořadí, což pomáhá utajit skryté závislosti řazení mezi testy. Toto nastavení nelze kombinovat s OrderTestsByNameInClass. |
RandomTestOrderSeed |
Od verze MSTest 4.3, když je RandomizeTestOrder nastaveno na true, nastavte celočíselný seed, aby bylo možné při opakovaném spuštění reprodukovat náhodné pořadí. Pokud není nastaveno, pro každé spuštění se použije nový seed. |
|
SettingsFile |
Tady můžete zadat soubor nastavení testu, který se má použít s adaptérem MSTest. Můžete také určit soubor nastavení testu z nabídky nastavení. Pokud zadáte tuto hodnotu, musíte také nastavit ForcedLegacyMode hodnotu true.<ForcedLegacyMode>true</ForcedLegacyMode> |
|
TestCleanupTimeout |
Žádný | Zadejte globálně časový limit, který se má použít pro každou instanci metody vyčištění testu.
[Timeout] atribut zadaný v metodě vyčištění testu přepíše globální časový limit. |
TestInitializeTimeout |
Žádný | Zadejte globálně časový limit, který se má použít pro každou instanci metody inicializace testu.
[Timeout] atribut zadaný v metodě inicializace testu přepíše globální časový limit. |
TestTimeout |
Žádný | Získá globálně zadaný časový limit testovacího případu. |
TreatClassAndAssemblyCleanupWarningsAsErrors |
nepravdivý | Pokud chcete zobrazit nezdary v čištění tříd jako chyby, nastavte tuto hodnotu na true. |
TreatDiscoveryWarningsAsErrors |
nepravdivý | Pokud chcete nahlásit upozornění zjišťování testů jako chyby, nastavte tuto hodnotu na true. |
Hodnoty časového limitu musí být kladné celé číslo v milisekundách. Chcete-li spustit bez časového limitu, vynecháte položku místo nastavení na 0. Vypršení časového limitu globálního testovacího zařízení dědí odpovídající TestInitializeTimeout hodnotu nebo TestCleanupTimeout hodnotu.
TestRunParameter prvek
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>
Parametry testovacího spuštění poskytují způsob, jak definovat proměnné a hodnoty, které jsou k dispozici pro testy za běhu. Přístup k parametrům pomocí vlastnosti MSTest TestContext.Properties :
private string _appUrl;
public TestContext TestContext { get; set; }
[TestMethod]
public void HomePageTest()
{
string _appUrl = TestContext.Properties["webAppUrl"];
}
Pokud chcete použít parametry testovacího spuštění, přidejte do testovací třídy veřejnou TestContext vlastnost.
Příklad souboru .runsettings
Následující xml ukazuje obsah typického souboru .runsettings . Zkopírujte tento kód a upravte ho tak, aby vyhovoval vašim potřebám.
Každý prvek souboru je volitelný, protože má výchozí hodnotu.
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- Parameters used by tests at runtime -->
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
<Parameter name="webAppUserName" value="Admin" />
<Parameter name="webAppPassword" value="Password" />
</TestRunParameters>
<!-- MSTest -->
<MSTest>
<MapInconclusiveToFailed>True</MapInconclusiveToFailed>
<CaptureTraceOutput>false</CaptureTraceOutput>
<DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
<DeploymentEnabled>False</DeploymentEnabled>
<ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
<AssemblyResolution>
<Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
</AssemblyResolution>
</MSTest>
</RunSettings>
testconfig.json
Při spouštění testů pomocí msTestu můžete ke konfiguraci chování spouštěče testů použít soubor testconfig.json. Soubor testconfig.json je soubor JSON, který obsahuje nastavení konfigurace pro spouštěč testů. Tento soubor slouží ke konfiguraci spouštěče testů a testovacího spouštěcího prostředí. Další informace najdete v dokumentaci k MTP testconfig.json.
Počínaje verzí MSTest 3.7 můžete také nakonfigurovat spuštění MSTest ve stejném konfiguračním souboru. Následující části popisují nastavení, která můžete použít v souboru testconfig.json.
Počínaje MSTest 4.3.3, .NET Framework běží také přijmout komentáře a koncové čárky v testconfig.json.
MSTest, element
Nastavení MSTest jsou seskupené podle funkcí popsaných v následujících částech.
| Položka | Výchozí | Popis |
|---|---|---|
| povolit testovací metody základní třídy z jiných sestavení | pravda | Hodnota určující, zda povolit zjišťování testovacích metod ze základních tříd v jiném sestavení než odvozená testovací třída. |
| classCleanupLifecycle | KonecMontáže | Pokud chcete, aby čištění třídy probíhalo na konci třídy, nastavte ho na EndOfClass. |
NastaveníassemblyResolution
Všechna nastavení v této části patří do elementu assemblyResolution.
| Položka | Výchozí | Popis |
|---|---|---|
| cesty | Žádný | Při hledání a spouštění testů jednotek můžete určit cesty k dalším sestavením. Tyto cesty použijte například pro sestavení závislostí, která nejsou ve stejném adresáři jako testovací sestavení. Cestu můžete zadat ve tvaru { "path": "...", "includeSubDirectories": "true/false" }. |
Příklad:
{
"mstest": {
"assemblyResolution": {
{ "path": "...", "includeSubDirectories": "true/false" }
}
}
}
Nastavenídeployment
Všechna nastavení v této části patří do elementu deployment.
| Položka | Výchozí | Popis |
|---|---|---|
| smažteSložkuProNasazeníPoDokončeníTestu | pravda | Pokud chcete zachovat adresář nasazení po testovacím spuštění, nastavte tuto hodnotu na false. |
| NasazeníTestovacíchZdrojovýchZávislostí | pravda | Určuje, zda mají být nasazeny referenční zdroje testu. |
| povoleno | pravda | Pokud nastavíte hodnotu na false, položky nasazení, které zadáte v testovací metodě, se do adresáře nasazení nekopírují. |
Příklad:
{
"mstest": {
"deployment": {
"deleteDeploymentDirectoryAfterTestRunIsComplete": true,
"deployTestSourceDependencies": true,
"enabled": true
}
}
}
Nastaveníoutput
Všechna nastavení v této části patří do elementu output.
| Položka | Výchozí | Popis |
|---|---|---|
| captureTrace | Result |
Zachyťte Console, Tracea Debug výstup a přidružte ho k aktuálnímu testu. Počínaje verzí MSTest 4.4, použijte None, Resultnebo Live.
Live během testovacího běhu také vypíše výstup, včetně TestContext.Write* zpráv. Logické hodnoty zůstávají podporovány: true mapy na Resulta false mapovat na None. |
Příklad:
{
"mstest": {
"output": {
"captureTrace": false
}
}
}
Nastaveníparallelism
Všechna nastavení v této části patří do elementu parallelism.
| Položka | Výchozí | Popis |
|---|---|---|
| povoleno | nepravdivý | Povolte paralelizaci testů. |
| obor | třída | Rozsah paralelizace. Můžete ho nastavit na method. Výchozí classodpovídá spuštění všech testů dané třídy postupně, ale více tříd paralelně. |
| dělníci | 0 | Počet vláken/pracovních procesů, které se mají použít pro paralelizaci. Výchozí hodnota odpovídá počtu procesorů na aktuálním počítači. |
Příklad:
{
"mstest": {
"parallelism": {
"enabled": true,
"scope": "method",
"workers": 32
}
}
}
Nastaveníexecution
Všechna nastavení v této části patří do elementu execution.
| Položka | Výchozí | Popis |
|---|---|---|
| považovatPrázdnýZdrojDatZaNepřesvědčivý | nepravdivý | Při nastavení na truese prázdný zdroj dat považuje za neprůkazný. |
| zvažovatPevnéBodyJakoZvláštníTesty | nepravdivý | Chcete-li zobrazit AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup jako jednotlivé položky ve Visual Studiu a Visual Studio Code v protokolu Test Explorer a .trx, nastavte tuto hodnotu na true. |
| závislosti | Počínaje msTest 4.4 deklarujte závislost chains testu a nodes. Toto nastavení je k dispozici pouze u Microsoft. Testing.Platform. Další informace najdete v tématu Testování závislostí. |
|
| převéstNepřesvědčivýNaNeúspěšný | nepravdivý | Pokud se test dokončí s nejasným stavem, mapuje se na vynechaný stav v Test Explorer. Pokud chcete, aby se nejasné testy zobrazovaly jako neúspěšné, nastavte hodnotu na true. |
| Spustit ladicí program při selhání testu | nepravdivý | Od verze MSTest 4.2 platí, že je-li nastavena hodnota true, MSTest spustí ladicí program, když test selže. |
| mapNeproveditelnýNaSelhaný | pravda | Hodnota označující, zda neproveditelný výsledek je mapován na neúspěšný test. |
| seřaditTestyPodleJménaVeTřídě | nepravdivý | Spouštění testů v abecedním pořadí v rámci každé třídy Počínaje MSTest 4.3 použijte mstest.execution.orderTestsByNameInClass. Předchozí mstest.orderTestsByNameInClass klíč stále funguje, ale vygeneruje upozornění na vyřazení. |
| randomizeTestOrder | nepravdivý | Počínaje verzí MSTest 4.3 nastavte tuto hodnotu tak, aby true spouštěla testy v náhodném pořadí, což pomáhá utajit skryté závislosti řazení mezi testy. Toto nastavení nelze kombinovat s orderTestsByNameInClass. |
| randomTestOrderSeed | Od verze MSTest 4.3, když je randomizeTestOrder nastaveno na true, nastavte celočíselnou inicializační hodnotu, aby bylo možné náhodné pořadí reprodukovat při opakovaném spuštění. Pokud není nastaveno, pro každé spuštění se použije nový seed. |
|
| zacházejte s varováními o vyčištění třídy a sestavy jako s chybami | nepravdivý | Pokud chcete zobrazit nezdary v čištění tříd jako chyby, nastavte tuto hodnotu na true. |
| treatDiscoveryWarningsAsErrors (považujte varování při odhalování za chyby) | nepravdivý | Pokud chcete nahlásit upozornění zjišťování testů jako chyby, nastavte tuto hodnotu na true. |
Příklad:
{
"mstest": {
"execution": {
"considerEmptyDataSourceAsInconclusive": false,
"considerFixturesAsSpecialTests": false,
"mapInconclusiveToFailed": true,
"mapNotRunnableToFailed": true,
"treatClassAndAssemblyCleanupWarningsAsErrors": false,
"treatDiscoveryWarningsAsErrors": false
}
}
}
Nastavenítimeout
Všechna nastavení v této části patří do elementu timeout.
| Položka | Výchozí | Popis |
|---|---|---|
| čištění sestavy | Žádný | Globálně určete časový limit, který se má použít pro každou instanci metody čištění sestavení. |
| inicializaceSestavení | Žádný | Zadejte globálně časový limit, který se má použít pro každou instanci metody inicializace sestavení. |
| třídní úklid | Žádný | Zadejte globálně časový limit, který se má použít pro každou instanci metody úklidu třídy. |
| classInitialize | Žádný | Zadejte globálně časový limit, který se má použít pro každou instanci metody inicializace třídy. |
| globalTestCleanup | testCleanup |
Počínaje msTest 4.4 zadejte časový limit pro každou globální metodu čištění testů. Pokud tuto položku vynecháte, MSTest použije testCleanup. |
| globalTestInitialize | testInitialize |
Počínaje msTest 4.4 zadejte časový limit pro každou globální metodu inicializace testu. Pokud tuto položku vynecháte, MSTest použije testInitialize. |
| test | Žádný | Zadejte globálně časový limit testu. |
| testCleanup | Žádný | Zadejte globálně časový limit, který se má použít pro každou instanci metody vyčištění testu. |
| testInitialize | Žádný | Zadejte globálně časový limit, který se má použít pro každou instanci metody inicializace testu. |
| PoužijKooperativníZrušení | nepravdivý | Pokud je nastavena na true, v případě časového limitu MSTest aktivuje pouze zrušení CancellationToken, ale nezastaví sledování metody. Toto chování je výkonnější, ale spoléhá na uživatele, aby správně tok tokenu prošel všemi cestami. |
Poznámka
Hodnoty časového limitu musí být kladné celé číslo v milisekundách. Chcete-li spustit bez časového limitu, vynecháte položku místo nastavení na 0. Časový limit globálního testovacího zařízení dědí odpovídající testInitialize hodnotu nebo testCleanup hodnotu, takže vynecháte obě položky, pokud nechcete mít časový limit u globálního zařízení. Atribut [Timeout] metody přepíše nakonfigurovaný časový limit.
Příklad:
{
"mstest": {
"timeout": { "globalTestInitialize": 30000, "globalTestCleanup": 30000 }
}
}
Příklad souboru testconfig.json
Následující json ukazuje obsah typického souboru .testconfig.json. Zkopírujte tento kód a upravte ho tak, aby vyhovoval vašim potřebám.
Každý prvek souboru je volitelný, protože má výchozí hodnotu.
{
"platformOptions": {
"resultDirectory": "./TestResults"
},
"mstest": {
"execution": {
"mapInconclusiveToFailed": true,
"disableAppDomain": true,
"considerFixturesAsSpecialTests": false
},
"parallelism": {
"enabled": true,
"scope": "method"
},
"output": {
"captureTrace": false
}
}
}
Vlastnosti nástroje MSBuild
Od verze MSTest 4.3 můžete povolit paralelizaci na úrovni sestavení v souboru projektu nebo v Directory.Build.props, aniž byste museli definovat atribut [assembly: Parallelize]. Tyto vlastnosti generují odpovídající atribut sestavení během sestavení, takže musí GenerateAssemblyInfo být true (výchozí hodnota pro projekty ve stylu sady SDK).
| Property | Výchozí | Popis |
|---|---|---|
MSTestParallelizeScope |
Obor paralelizace. Nastavte ho na MethodLevel nebo ClassLevel, aby se vygenerovalo [assembly: Parallelize(Scope = ExecutionScope.MethodLevel)] (nebo ExecutionScope.ClassLevel), nebo na None, aby se vygenerovalo [assembly: DoNotParallelize]. |
|
MSTestParallelizeWorkers |
Maximální počet pracovních vláken, uváděný jako hodnota Workers položky [assembly: Parallelize]. Hodnota 0 odpovídá počtu procesorů v aktuálním počítači. Tuto vlastnost nelze nastavit, pokud MSTestParallelizeScope je None. |
MSTest ověřuje obě vlastnosti během sestavení. Neplatné hodnoty oboru, počet pracovních procesů bez celého čísla a počet pracovních procesů v kombinaci s oborem sestavení selžou None . Nedeklarujte [assembly: Parallelize] ani [assembly: DoNotParallelize] ve zdroji, protože vygenerovaný atribut by ho duplikoval. Pokud GenerateAssemblyInfo je , falsedeklarujte atribut ve zdroji.
Následující příklad umožňuje paralelizaci na úrovni metody se čtyřmi pracovními procesy pro každý testovací projekt, který importuje Directory.Build.props soubor:
<Project>
<PropertyGroup>
<MSTestParallelizeScope>MethodLevel</MSTestParallelizeScope>
<MSTestParallelizeWorkers>4</MSTestParallelizeWorkers>
</PropertyGroup>
</Project>