Udostępnij za pośrednictwem


Konfigurowanie narzędzia MSTest

MSTest, Microsoft Testing Framework, to platforma testowa dla aplikacji .NET. Umożliwia ona pisanie i wykonywanie testów oraz zapewnianie zestawów testów z integracją z eksploratorami testów programu Visual Studio i Visual Studio Code, interfejsem wiersza polecenia platformy .NET i wieloma potokami ciągłej integracji.

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ą uruchamiania vsTest lub dokumentacją uruchamiania modułu uruchamiającego MSTest.

MSTest, element

Następujące wpisy runsettings umożliwiają skonfigurowanie sposobu działania narzędzia MSTest.

Konfigurowanie Wartość domyślna Wartości
AssemblyCleanupTimeout 0 Określ globalnie limit czasu, który ma być stosowany w każdym wystąpieniu metody oczyszczania zestawu. [Timeout] atrybut określony w metodzie oczyszczania zestawu zastępuje globalny limit czasu .
AssemblyInitializeTimeout 0 Określ globalnie limit czasu, który ma być stosowany w każdym wystąpieniu zestawu zainicjuj metodę. [Timeout] atrybut określony w zestawie inicjuje metodę zastępowania globalnego limitu czasu .
AssemblyResolution fałsz Ścieżki do dodatkowych zestawów można określić 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*interfejsów API , Trace.Write*i Debug.Write* , które będą skojarzone z bieżącym uruchomionym testem.
ClassCleanupLifecycle EndOfClass Jeśli chcesz, aby oczyszczanie klasy było wykonywane na końcu zestawu, ustaw go na EndOfAssembly. (Nieobsługiwane już od msTest w wersji 4 jako EndOfClass jest ustawieniem domyślnym i tylko Zachowanie klasyCleanup )
ClassCleanupTimeout 0 Określ globalnie limit czasu, który ma być stosowany w każdym wystąpieniu 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 dla każdego wystąpienia klasy inicjowania metody. [Timeout] atrybut określony w klasie inicjowania metody zastępuje globalny limit czasu.
ConsiderFixturesAsSpecialTests fałsz Aby wyświetlić AssemblyInitializewartości , , AssemblyCleanupClassInitializeClassCleanupjako pojedyncze wpisy w programach Visual Studio i Visual Studio Code Test Explorer i .trx, ustaw tę wartość na true
DeleteDeploymentDirectoryAfterTestRunIsComplete prawda Aby zachować katalog wdrożenia po uruchomieniu testu, ustaw tę wartość na false.
WdrożenieEnabled 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.
EnableBaseClassTestMethodsFromOtherAssemblies 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ść true , aby używać starszej karty testowej.

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 on zamapowany na stan pominięty w Eksploratorze testów. Jeśli chcesz, aby niejednoznaczne testy zostały pokazane jako nieudane, ustaw wartość true.
MapNotRunnableToFailed prawda Wartość wskazująca, czy wynik niemożliwy do uruchomienia jest mapowany na test, który zakończył się niepowodzeniem.
OrderTestsByNameInClass 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 to KlasaLevel.

<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 Określ globalnie limit czasu, który ma być stosowany w każdym wystąpieniu metody oczyszczania testu. [Timeout] atrybut określony w metodzie oczyszczania testu zastępuje limit czasu globalnego.
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 limit czasu globalnego.
TestTimeout 0 Pobiera określony globalny limit czasu przypadku testowego.
TreatClassAndAssemblyCleanupWarningsAsErrors fałsz Aby zobaczyć błędy 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.

Ustawienia assemblyResolution

Wpis Wartość domyślna Opis
Ścieżki Żaden Ścieżki do dodatkowych zestawów można określić 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" }.

Ustawienia wdrożenia

Wpis Wartość domyślna Opis
usuńKatalogPoWdrożeniuPoZakończeniuTestu (deleteDeploymentDirectoryAfterTestRunIsComplete) prawda Aby zachować katalog wdrożenia po uruchomieniu testu, ustaw tę wartość na false.
deployTestSourceDependencies 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.

Ustawienia danych wyjściowych

Wpis Wartość domyślna Opis
captureTrace fałsz Przechwyć wiadomości tekstowe pochodzące z Console.Write*interfejsów API , Trace.Write*i Debug.Write* , które będą skojarzone z bieżącym uruchomionym testem.

Ustawienia równoległości

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.

Ustawienia wykonywania

Wpis Wartość domyślna Opis
rozważPustąBazęDanychJakoNiejednoznaczną 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.
mapNiejednoznacznośćDoNiepowodzenia fałsz Jeśli test zakończy się z niejednoznacznym stanem, zostanie on zamapowany na stan pominięty 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 jest mapowany na test, który zakończył się niepowodzeniem.
traktujOstrzeżeniaCzyszczeniaKlasyIZestawuJakoBłędy fałsz Aby zobaczyć błędy 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 odnajdywania testów jako błędy, ustaw tę wartość na true.

Ustawienia limitu czasu

Wpis Wartość domyślna Opis
assemblyCleanup 0 Określ globalnie limit czasu, który ma być stosowany w każdym wystąpieniu metody oczyszczania zestawu.
assemblyInitialize 0 Określ globalnie limit czasu, który ma być stosowany w każdym wystąpieniu zestawu zainicjuj metodę.
classCleanup 0 Określ globalnie limit czasu, który ma być stosowany w każdym wystąpieniu metody oczyszczania klasy.
classInitialize 0 Określ globalnie limit czasu, który ma być stosowany dla każdego wystąpienia klasy inicjowania metody.
próba 0 Określ globalnie limit czasu testu.
testCleanup 0 Określ globalnie limit czasu, który ma być stosowany w każdym wystąpieniu metody oczyszczania testu.
testInitialize 0 Określ globalnie limit czasu, który ma być stosowany w każdym wystąpieniu metody inicjowania testu.
useCooperativeCancellation fałsz Po ustawieniu na true, w przypadku przekroczenia czasu, narzędzie MSTest wyzwoli anulowanie CancellationToken, ale nie zaprzestanie obserwacji metody. To zachowanie jest bardziej wydajne, ale polega na tym, że użytkownik poprawnie przepuszcza token przez wszystkie ś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ł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
    }
  }
}