Udostępnij za pośrednictwem


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 truepuste ź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
    }
  }
}