Konfigurowanie narzędzia MSTest
MSTest, Microsoft Testing Framework, to platforma testowa dla aplikacji .NET. Umożliwia pisanie i wykonywanie testów oraz zapewnia zestawy testowe z integracją z eksploratorami testów programu Visual Studio i Visual Studio Code, .NET CLI oraz wieloma potokami ciągłej integracji (CI).
MSTest to w pełni obsługiwana platforma testowa typu open source i międzyplatformowa, która współpracuje ze wszystkimi obsługiwanymi obiektami docelowymi platformy .NET (.NET Framework, .NET Core, .NET, UWP, WinUI itd.) hostowaną w usłudze GitHub.
Ustawienia uruchamiania
Plik .runsettings może służyć do konfigurowania sposobu uruchamiania testów jednostkowych. Aby dowiedzieć się więcej na temat ustawień runsettings i konfiguracji związanych z platformą, możesz zapoznać się z dokumentacją runsettings VSTest lub dokumentacją runsettings MSTest runner.
MSTest element
Następujące wpisy runsettings umożliwiają skonfigurowanie sposobu działania narzędzia MSTest.
Konfigurowanie | Wartość domyślna | Wartości |
---|---|---|
LimitCzasuCzyszczeniaZestawu | 0 | Określ globalnie limit czasu, który ma być stosowany dla każdej instancji metody oczyszczania zestawu.
[Timeout] atrybut określony w metodzie oczyszczania zestawu zastępuje globalny limit czasu . |
AssemblyInitializeTimeout | 0 | Określ globalnie limit czasu, jaki ma być stosowany do każdej metody inicjalizacji zestawu.
[Timeout] atrybut określony w metodzie inicjalizacji zestawu zastępuje globalny limit czasu. |
AssemblyResolution | fałsz | Można określić ścieżki do dodatkowych zestawów podczas znajdowania i uruchamiania testów jednostkowych. Na przykład użyj tych ścieżek dla zestawów zależności, które nie należą do tego samego katalogu co zestaw testowy. Aby określić ścieżkę, użyj elementu Ścieżka katalogu. Ścieżki mogą zawierać zmienne środowiskowe.<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution> Ta funkcja jest stosowana tylko w przypadku korzystania z obiektu docelowego programu .NET Framework. |
CaptureTraceOutput | prawda | Przechwyć wiadomości tekstowe pochodzące z Console.Write* , Trace.Write* i Debug.Write* API, które będą skojarzone z bieżącym testem. |
ClassCleanupLifecycle | EndOfClass | Jeśli chcesz, aby oczyszczanie klasy było wykonywane na końcu kompilacji, ustaw go na EndOfAssembly. (Nieobsługiwane już od MSTest w wersji 4, ponieważ EndOfClass jest domyślnym i jedynym zachowaniem ClassCleanup) |
ClassCleanupTimeout | 0 | Określ globalnie limit czasu, który ma być stosowany w każdej instancji metody oczyszczania klasy.
[Timeout] atrybut określony w metodzie oczyszczania klasy zastępuje globalny limit czasu. |
ClassInitializeTimeout | 0 | Określ globalnie limit czasu, który ma być stosowany na każdą instancję metody inicjalizacji klasy.
[Timeout] atrybut określony w metodzie inicjalizacji klasy zastępuje globalny limit czasu. |
ConsiderFixturesAsSpecialTests | fałsz | Aby wyświetlić AssemblyInitialize , AssemblyCleanup , ClassInitialize i ClassCleanup jako pojedyncze wpisy w programach Visual Studio i Visual Studio Code oraz w logu Test Explorer i .trx, ustaw tę wartość na prawda |
UsuńKatalogWdrożeniaPoZakończeniuTestów | prawda | Aby zachować katalog wdrożenia po uruchomieniu testu, ustaw tę wartość na false. |
WdrożenieWłączone | prawda | Jeśli ustawisz wartość false, elementy wdrożenia określone w metodzie testowej nie zostaną skopiowane do katalogu wdrożenia. |
DeployTestSourceDependencies | prawda | Wartość wskazująca, czy odwołania do źródła testów mają zostać wdrożone. |
WłączMetodyTestoweKlasyBazowejZInnychAsemblacji | prawda | Wartość wskazująca, czy włączyć odnajdywanie metod testowych z klas bazowych w innym zestawie niż dziedzicząca klasa testowa. |
ForcedLegacyMode | fałsz | W starszych wersjach programu Visual Studio adapter MSTest został zoptymalizowany pod kątem szybszego i bardziej skalowalnego. Niektóre zachowania, na przykład kolejność, w jakiej są uruchamiane testy, mogą nie być dokładnie takie same, jak w poprzednich wersjach programu Visual Studio. Ustaw wartość na true, aby używać starszego adaptera testowego. Możesz na przykład użyć tego ustawienia, jeśli masz plik app.config określony dla testu jednostkowego. Zaleca się, aby rozważyć refaktoryzację testów pozwalającą na użycie nowszego adaptera. |
MapInconclusiveToFailed | fałsz | Jeśli test zakończy się z niejednoznacznym stanem, zostanie przypisany do stanu pominiętego w Eksploratorze testów. Jeśli chcesz, aby niejednoznaczne testy zostały pokazane jako nieudane, ustaw wartość true. |
MapNieMożeByćUruchomionaDoNiepowodzenia | prawda | Wartość wskazująca, czy wynik niemożliwy do wykonania jest przypisany do testu zakończonego niepowodzeniem. |
PorządkowanieTestówWedługNazwyWKlasie | fałsz | Jeśli chcesz uruchamiać testy według nazw testów zarówno w Eksploratorach testów, jak i w wierszu polecenia, ustaw tę wartość na true. |
Parallelize | Służy do ustawiania ustawień przetwarzania równoległego: Procesy robocze: liczba wątków/procesów roboczych, które mają być używane do przetwarzania równoległego, czyli domyślnie liczba procesorów na bieżącym komputerze. ZAKRES: Zakres przetwarzania równoległego. Można ustawić ją na MethodLevel. Domyślnie jest ClassLevel. <Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize> |
|
Plik ustawień | W tym miejscu możesz określić plik ustawień testowych do użycia z adapterem MSTest. Możesz również określić plik ustawień testu z menu ustawień. Jeśli określisz tę wartość, musisz również ustawić wartość ForcedLegacyMode na true. <ForcedLegacyMode>true</ForcedLegacyMode> |
|
TestCleanupTimeout | 0 | Ustal globalny limit czasu, który ma być stosowany na każde wystąpienie metody czyszczenia testów.
[Timeout] atrybut określony w metodzie czyszczenia testu zastępuje globalny limit czasu. |
TestInitializeTimeout | 0 | Określ globalnie limit czasu, który ma być stosowany w każdym wystąpieniu metody inicjowania testu.
[Timeout] atrybut określony w metodzie inicjowania testu zastępuje globalny limit czasu. |
TestTimeout | 0 | Pobiera określony globalny czas zakończenia przypadku testowego. |
TraktujOstrzeżeniaPodczasCzyszczeniaKlasyIZeZgromadzeniaJakoBłędy | fałsz | Aby widzieć niepowodzenia w czyszczeniu klas jako błędy, ustaw tę wartość na true. |
TreatDiscoveryWarningsAsErrors | fałsz | Aby zgłosić ostrzeżenia dotyczące odnajdywania testów jako błędy, ustaw tę wartość na true. |
TestRunParameter
element
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>
Parametry przebiegu testu umożliwiają definiowanie zmiennych i wartości dostępnych dla testów w czasie wykonywania. Uzyskaj dostęp do parametrów przy użyciu właściwości MSTest TestContext.Properties :
private string _appUrl;
public TestContext TestContext { get; set; }
[TestMethod]
public void HomePageTest()
{
string _appUrl = TestContext.Properties["webAppUrl"];
}
Aby użyć parametrów przebiegu testu, dodaj właściwość publiczną TestContext do klasy testowej.
Przykładowy plik .runsettings
Poniższy kod XML przedstawia zawartość typowego pliku .runsettings . Skopiuj ten kod i zmodyfikuj go zgodnie z potrzebami.
Każdy element pliku jest opcjonalny, ponieważ ma wartość domyślną.
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- Parameters used by tests at run time -->
<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
Podczas uruchamiania testów za pomocą narzędzia MSTest można użyć pliku testconfig.json
do skonfigurowania zachowania modułu uruchamiającego testy. Plik testconfig.json
jest plikiem JSON zawierającym ustawienia konfiguracji modułu uruchamiającego testy. Plik służy do konfigurowania modułu uruchamiającego testy i środowiska wykonywania testów. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją Microsoft.Testing.Platform testconfig.json.
Od wersji MSTest 3.7 można również skonfigurować przebiegi MSTest w tym samym pliku konfiguracji. W poniższych sekcjach opisano ustawienia, których można użyć w pliku testconfig.json
.
MSTest element
Ustawienia MSTest są pogrupowane według funkcji opisanych w kolejnych sekcjach.
Wpis | Wartość domyślna | Opis |
---|---|---|
sortujTestyWedługNazwyWKlasie | fałsz | Jeśli chcesz uruchamiać testy według nazw testów zarówno w Eksploratorach testów, jak i w wierszu polecenia, ustaw tę wartość na true. |
włączMetodyTestoweKlasyBazowejZInnychZestawów | prawda | Wartość wskazująca, czy włączyć odnajdywanie metod testowych z klas bazowych w innym zestawie niż dziedzicząca klasa testowa. |
classCleanupLifecycle | KoniecMontażu | Jeśli chcesz, aby oczyszczanie klasy było wykonywane na końcu klasy, ustaw ją na EndOfClass. |
UstawieniaassemblyResolution
Wszystkie ustawienia w tej sekcji należą do elementu assemblyResolution
.
Wpis | Wartość domyślna | Opis |
---|---|---|
Ścieżki | Żaden | Można określić ścieżki do dodatkowych zestawów podczas znajdowania i uruchamiania testów jednostkowych. Na przykład użyj tych ścieżek dla zestawów zależności, które nie należą do tego samego katalogu co zestaw testowy. Możesz określić ścieżkę w kształcie { "path": "...", "includeSubDirectories": "true/false" } . |
Przykład:
{
"mstest": {
"assemblyResolution": {
{ "path": "...", "includeSubDirectories": "true/false" }
}
}
}
Ustawieniadeployment
Wszystkie ustawienia w tej sekcji należą do elementu deployment
.
Wpis | Wartość domyślna | Opis |
---|---|---|
usuńKatalogPoWdrożeniuPoZakończeniuTestu (deleteDeploymentDirectoryAfterTestRunIsComplete) | prawda | Aby zachować katalog wdrożenia po uruchomieniu testu, ustaw tę wartość na false. |
wdrożZależnościŹródłaTestowego | prawda | Wskazuje, czy odwołania do źródła testowego mają zostać wdrożone. |
Włączone | prawda | Jeśli ustawisz wartość false, elementy wdrożenia określone w metodzie testowej nie zostaną skopiowane do katalogu wdrożenia. |
Przykład:
{
"mstest": {
"deployment": {
"deleteDeploymentDirectoryAfterTestRunIsComplete": true,
"deployTestSourceDependencies": true,
"enabled": true
}
}
}
Ustawieniaoutput
Wszystkie ustawienia w tej sekcji należą do elementu output
.
Wpis | Wartość domyślna | Opis |
---|---|---|
captureTrace | prawda | Przechwyć wiadomości tekstowe pochodzące z interfejsów API Console.Write* , Trace.Write* i Debug.Write* , które będą skojarzone z aktualnie uruchomionym testem. |
Przykład:
{
"mstest": {
"output": {
"captureTrace": false
}
}
}
Ustawieniaparallelism
Wszystkie ustawienia w tej sekcji należą do elementu parallelism
.
Wpis | Wartość domyślna | Opis |
---|---|---|
Włączone | fałsz | Włącz równoległe testowanie. |
zakres | klasa | Zakres równoleglenia. Można ustawić go na method . Wartość domyślna, class , odpowiada uruchamianiu wszystkich testów danej klasy sekwencyjnie, ale wiele klas równolegle. |
Pracownicy | 0 | Liczba wątków/procesów roboczych do użycia na potrzeby przetwarzania równoległego. Domyślna wartość odpowiada liczbie procesorów w bieżącej maszynie. |
Przykład:
{
"mstest": {
"parallelism": {
"enabled": true,
"scope": "method",
"workers": 32
}
}
}
Ustawieniaexecution
Wszystkie ustawienia w tej sekcji należą do elementu execution
.
Wpis | Wartość domyślna | Opis |
---|---|---|
rozważ puste źródło danych jako niejednoznaczne | fałsz | W przypadku ustawienia wartości true puste źródło danych jest uznawane za niejednoznaczne. |
rozważUstawieniaJakoSpecjalneTesty | fałsz | Aby wyświetlić AssemblyInitialize , AssemblyCleanup , ClassInitialize , ClassCleanup jako pojedyncze wpisy w programach Visual Studio i Visual Studio Code Test Explorer oraz .trx pliku dziennika, ustaw tę wartość na true. |
mapujNiejednoznacznyDoNiepowodzenia | fałsz | Jeśli test zakończy się z niejednoznacznym stanem, zostanie on przypisany do stanu pominiętego w Eksploratorze Testów. Jeśli chcesz, aby niejednoznaczne testy zostały pokazane jako nieudane, ustaw wartość true. |
mapujNieUruchomioneNaNiepowodzenia | prawda | Wartość wskazująca, czy wynik niemożliwy do uruchomienia oznacza niepowodzenie testu. |
Traktuj ostrzeżenia dotyczące czyszczenia klasy i zestawu jako błędy | fałsz | Aby widzieć niepowodzenia w czyszczeniu klas jako błędy, ustaw tę wartość na true. |
Traktuj ostrzeżenia związane z wykryciem jako błędy | fałsz | Aby zgłosić ostrzeżenia dotyczące wykrywania testów jako błędy, ustaw wartość na true. |
Przykład:
{
"mstest": {
"execution": {
"considerEmptyDataSourceAsInconclusive": false,
"considerFixturesAsSpecialTests": false,
"mapInconclusiveToFailed": true,
"mapNotRunnableToFailed": true,
"treatClassAndAssemblyCleanupWarningsAsErrors": false,
"treatDiscoveryWarningsAsErrors": false
}
}
}
Ustawieniatimeout
Wszystkie ustawienia w tej sekcji należą do elementu timeout
.
Wpis | Wartość domyślna | Opis |
---|---|---|
czyszczenie zestawu | 0 | Określ globalnie limit czasu, który ma być stosowany w każdym wystąpieniu metody oczyszczania zestawu. |
inicjalizacja zestawu | 0 | Określ globalnie limit czasu stosowany w każdym wystąpieniu metody inicjalizującej zestawu. |
classCleanup | 0 | Określ globalnie czas oczekiwania, który ma być stosowany do każdej instancji metody oczyszczania klasy. |
classInitialize | 0 | Określ globalnie limit czasu, który ma być stosowany dla każdego wystąpienia metody initialize klasy. |
próba | 0 | Określ globalnie limit czasu testu. |
testCleanup | 0 | Określ globalnie limit czasu, który ma być stosowany w każdej instancji metody czyszczenia testu. |
testInitialize | 0 | Określ globalnie limit czasu, który ma być stosowany w każdym wystąpieniu metody inicjowania testu. |
użyjKooperacyjnegoAnulowania | fałsz | Po ustawieniu na true , w przypadku przekroczenia czasu, narzędzie MSTest wyzwoli anulowanie CancellationToken , ale nie zaprzestanie obserwacji metody. Takie działanie jest bardziej efektywne, ale polega na tym, że użytkownik poprawnie przekazuje token przez wszystkie możliwe ścieżki. |
Notatka
[Timeout]
atrybut określony dla metody zastępuje globalny limit czasu. Na przykład [Timeout(1000)]
w metodzie oznaczonej [AssemblyCleanup] zastąpi globalny limit czasu assemblyCleanup
.
Przykład:
{
"mstest": {
"timeout": {
"assemblyCleanup": 0,
"assemblyInitialize": 0,
"classCleanup": 0,
"classInitialize": 0,
"test": 0,
"testCleanup": 0,
"testInitialize": 0,
"useCooperativeCancellation": false
}
}
}
Przykładowy plik testconfig.json
Poniższy kod JSON przedstawia zawartość typowego pliku .testconfig.json. Skopiuj ten kod i zmodyfikuj go zgodnie z potrzebami.
Każdy element pliku jest opcjonalny, ponieważ ma wartość domyślną.
{
"platformOptions": {
},
"mstest": {
"execution": {
"mapInconclusiveToFailed" : true,
"disableAppDomain": true,
"considerFixturesAsSpecialTests" : false,
},
"parallelism" : {
"enabled": true,
"scope": "method",
},
"output": {
"captureTrace": false
}
}
}