Przewodnik migracji msTest v3
Ten przewodnik ułatwia użytkownikom uaktualnianie projektów MSTest z msTest v1 do MSTest v3. Narzędzie MSTest w wersji 3 wprowadza znaczące nowe funkcje, optymalizacje i pewne istotne zmiany powodujące niezgodność, aby zwiększyć niezawodność, szybkość wykonywania i zgodność z nowoczesnymi platformami .NET.
Kto jest dotknięty tym problemem?
Ten przewodnik jest przeznaczony dla projektów obecnie .NET Framework korzystających z programu MSTest v1 za pośrednictwem jednej z następujących metod:
- Odwołania do zestawów: Projekty odwołujące się
Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
bezpośrednio. - Pakiety NuGet: projekty korzystające z
MSTest.TestFramework
pakietu NuGet w wersji 1.0.0-1.4.0.
Jeśli projekt opiera się na narzędziu MSTest na potrzeby testowania jednostkowego i zawiera powyższe odwołania, skorzysta z ulepszeń biblioteki MSTest v3 i wymaga korekt opisanych w tym przewodniku.
Dlaczego warto przeprowadzić migrację do platformy MSTest w wersji 3?
Nawet jeśli twoja bieżąca konfiguracja MSTest jest zadowolona, uaktualnienie do wersji MSTest w wersji 3 powoduje znaczne korzyści, które zwiększają jakość i gotowość testów w przyszłości. Oto dlaczego teraz wprowadzenie przełącznika może być cennym krokiem do przodu:
Zwiększone zabezpieczenia: msTest v1 ma znane luki w zabezpieczeniach. Dzięki narzędziu MSTest v3 wdrożyliśmy rozbudowane ulepszenia zabezpieczeń w celu ochrony środowiska testowego.
Natychmiastowe zwiększenie wydajności: narzędzie MSTest w wersji 3 znacznie skraca czas wykonywania testu i optymalizuje użycie zasobów. Jest to szczególnie korzystne w przypadku potoków ciągłej integracji/ciągłego wdrażania, w których szybsze testy mogą skrócić cykle wdrażania i obniżyć koszty infrastruktury.
Testy sprawdzające przyszłość: platforma MSTest w wersji 3 oferuje niezawodną obsługę nowoczesnych wersji platformy .NET, w tym platformy .NET 8 i przyszłych iteracji, wraz ze zgodnością międzyplatformową. Oznacza to, że testy będą bardziej dostosowane i gotowe do uaktualnienia, unikając długu technicznego przestarzałych struktur testowych.
Zwiększona niezawodność kodu za pomocą nowych analizatorów: wbudowane analizatory kodu MSTest w wersji 3 wymuszają najlepsze rozwiązania, pomagając wychwytywać problemy na wczesnym etapie i promować bardziej czytelny kod testowy:
Proaktywne wykrywanie problemów: analizatory dostarczają opinii w czasie rzeczywistym, sugerując ulepszenia i flagując potencjalne problemy podczas pisania testów.
Silniejsze asercji bezpiecznych typów: zastępowanie niejednoznacznych przeciążeń, MSTest v3 wymusza asercji bezpiecznych typów, zmniejszając ryzyko nieprawidłowego zachowania testowego i co sprawia, że testy są bardziej niezawodne.
Czystszy kod, mniej konserwacji: dostosowując testy do standardów MSTest i najlepszych rozwiązań, MSTest v3 pomaga zachować czystszą, bardziej zarządzalną bazę kodu, zmniejszając dług techniczny w czasie.
Większa elastyczność i rozszerzalność: narzędzie MSTest w wersji 3 obsługuje zaawansowane scenariusze testowania, w tym dynamiczne źródła danych i równoległe wykonywanie w zestawie. Ta elastyczność umożliwia bardziej zaawansowane podejścia do testowania i przyspiesza tworzenie zestawów testów bez złożonych konfiguracji.
Uaktualniając, konfigurujesz testy tak, aby były szybsze, bardziej niezawodne i dostosowywane do przyszłych rozwoju platformy .NET, umieszczając projekt pod kątem długoterminowego sukcesu i łatwiejszej konserwacji.
Kroki migracji
1. Usuń odwołanie do zestawu
W przypadku projektów korzystających z biblioteki MSTest w wersji 1 za pośrednictwem odwołań do zestawów istnieją odwołania do następującej biblioteki DLL:
Microsoft.VisualStudio.QualityTools.UnitTestFramework
W projektach w stylu innych niż SDK te odwołania są często dodawane za pośrednictwem programu Visual Studio, a nie przez bezpośrednie edytowanie kodu XML. Aby usunąć te odwołania przy użyciu graficznego interfejsu użytkownika programu Visual Studio:
Otwórz Eksplorator rozwiązań w programie Visual Studio.
Rozwiń węzeł projektu dla projektu przy użyciu narzędzia MSTest.
Znajdź folder Odwołania w projekcie.
W folderze References znajdź i wybierz odwołania do biblioteki MSTest DLL,
Microsoft.VisualStudio.QualityTools.UnitTestFramework
Kliknij prawym przyciskiem myszy wybrane odwołania i wybierz polecenie Usuń z menu kontekstowego.
Zapisz projekt , aby zastosować zmiany.
2. Aktualizowanie projektu
Projekt można zaktualizować do biblioteki MSTest w wersji 3 na jeden z dwóch sposobów:
Pakiety aktualizacji: jeśli masz odwołania do pakietu NuGet do biblioteki MSTest.TestFramework i MSTest.TestAdapter, zaktualizuj je przy użyciu Menedżer pakietów NuGet w programie Visual Studio lub uruchamiając następujące polecenie w konsoli Menedżer pakietów NuGet:
Update-Package MSTest.TestFramework -Version 3.6.2 Update-Package MSTest.TestAdapter -Version 3.6.2
Lub Zainstaluj pakiet MSTest: zainstaluj najnowszy pakiet MSTest przy użyciu Menedżer pakietów NuGet w programie Visual Studio lub uruchamiając następujące polecenie w konsoli Menedżer pakietów NuGet:
Install-Package MSTest -Version 3.6.2
Możesz też zaktualizować plik projektu bezpośrednio (w przypadku projektów w stylu zestawu SDK): zaktualizuj
.csproj
plik, aby określić wersję zestawu MSTest SDK.<Project Sdk="MSTest.Sdk/3.6.2"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> </PropertyGroup> </Project>
Wybierz opcję najlepiej dopasowaną do konfiguracji projektu. Obie metody zapewniają uaktualnienie projektu do korzystania z narzędzia MSTest w wersji 3.
3. Aktualizowanie kodu
Assert.AreEqual/AreNotEqual lub Assert.AreSame/AreNotSame (z obiektem) Jeśli jedno z tych asercji powoduje błędy, zalecamy sprawdzenie, czy porównywane typy są zgodne. Jeśli tak, rozważ dodanie jawnego wpisywania ogólnego, aby rozwiązać ten problem.
przy użyciu typów ogólnych:
Assert.AreEqual<customObject>(expectedObject, actualObject); Assert.AreNotEqual<customObject>(expectedObject, actualObject);
Inicjowanie testów: użyj
TestInitialize
metod do inicjowania asynchronicznego.Oczyszczanie: użyj
TestCleanup
metod lubDispose
wzorca do czyszczenia.RunSettings:
.testsettings
plik nie jest już obsługiwany, co oznacza, że<LegacySettings>
nie jest już dostępny. Użyj polecenia .runsettings w celu skonfigurowania testu.
Nowe funkcje w programie MSTest v3
- Ulepszone wartości domyślne dla projektów testowych
- Uproszczona konfiguracja i użycie
- Rozszerzona rozszerzalność modułu uruchamiającego MSTest
- Nowe analizatory kodu oparte na platformie Roslyn na potrzeby ulepszonego programowania testowego
- Obsługa aplikacji WinUI
- Równoległe wykonywanie w zestawie
- Dynamiczne źródła danych na potrzeby testów opartych na danych
Przestarzałe funkcje
- Porzucona obsługa:
- .NET Framework 4.5 (użyj platformy .NET 4.6.2 lub nowszej)
- .NET Standard 1.0 (użyj platformy .NET Standard 2.0)
- Wersje platformy UWP wcześniejsze niż 16299
- Wersje winUI przed 18362
- .NET 5 (użyj platformy .NET Core 3.1 lub .NET 6)
Istotne zmiany i usunięte interfejsy API
Przeciążenia asercji
Jeśli asercji AreEqual, AreNotEqual, AreSame lub AreNotSame powodują błędy, zalecamy sprawdzenie, czy porównywane typy są zgodne. Jeśli tak, rozważ dodanie jawnego wpisywania ogólnego, aby rozwiązać ten problem.
DataRowAttribute
Aktualizacje
Konstruktory DataRowAttribute w msTest v3 zostały uproszczone w celu wymuszania dopasowywania typów dla parametrów. Oznacza to, że należy określić wartości w elemecie DataRow, które dokładnie odpowiadają typom parametrów metody.
Przykład:
[TestMethod]
[DataRow(1, "test")] // Correct: matches parameter types (int, string)
public void MyTestMethod(int number, string text) { ... }
W przypadkach, gdy typy nie są dokładnie zgodne, narzędzie MSTest w wersji 3 zgłosi błąd zamiast próby konwersji.
Ustawienia limitu czasu
W programie MSTest w wersji 3 obsługa Timeout
ustawień została ustandaryzowana w celu zapewnienia spójnego zachowania w różnych środowiskach platformy .NET. Ta zmiana może mieć wpływ na testy, które opierają się na określonych wartościach limitu czasu, zwłaszcza jeśli te testy są asynchroniczne lub działają w różnych strukturach.
- W msTest v1 lub v2 niektóre ustawienia limitu czasu mogły być interpretowane inaczej w zależności od struktury (np. .NET Framework a .NET Core).
- Narzędzie MSTest w wersji 3 wymusza spójne zachowanie limitu czasu, co może oznaczać, że testy skonfigurowane z limitami czasu w poprzednich wersjach mogą zakończyć się niepowodzeniem lub zachowywać się inaczej, jeśli wartości limitu czasu są zbyt krótkie w ramach nowego standardu.
Co to oznacza:
Testy z limitami czasu mogą wymagać korekty: jeśli testy mają
Timeout
atrybut z określonymi czasami trwania, sprawdź, czy te wartości nadal umożliwiają ukończenie testu w obszarze MSTest v3. Testy, które wcześniej przeszły z określonym limitem czasu, mogą wymagać większej lub mniejszej wartości limitu czasu, aby działać poprawnie zgodnie z nowymi regułami.Ujednolicona obsługa limitu czasu: ujednolicona obsługa limitu czasu MSTest v3 sprawia, że limity czasu są bardziej przewidywalne, ale wymaga sprawdzania i potencjalnie aktualizowania
Timeout
wartości w starszych testach.
Przykład:
// Old (v1/v2) - Timeout was sometimes interpreted inconsistently
[TestMethod]
[Timeout(2000)] // Timeout in milliseconds
public void TestMethod() { ... }
// New (v3) - Unified handling of timeout
[TestMethod]
[Timeout(2000)] // Verify this value still works under MSTest v3
public async Task TestMethod() { ... }
Zmiany konfiguracji
Upewnij się, że .runsettings
pliki są zgodne ze składnią i strukturą MSTest w wersji 3.
Równoległe wykonywanie i optymalizacja wydajności
Skonfiguruj równoległe wykonywanie w pliku .runsettings, aby zwiększyć wydajność.
Przykład:
<RunSettings>
<RunConfiguration>
<MaxCpuCount>-1</MaxCpuCount> <!-- Uses all available processors -->
</RunConfiguration>
</RunSettings>
Ulepszone użycie zasobów
Narzędzie MSTest w wersji 3 optymalizuje zarządzanie zasobami, co powoduje obniżenie użycia pamięci i lepszą wydajność procesora.
Obsługa przestarzałych atrybutów i migrowanie rozszerzeń niestandardowych
Przejrzyj przestarzałe atrybuty i zastąp je alternatywami MSTest v3 tam, gdzie to możliwe.
Analizatory kodu i najlepsze rozwiązania
Narzędzie MSTest w wersji 3 zawiera wbudowane analizatory kodu w celu uzyskania najlepszych rozwiązań, unikanie pułapek konfiguracji oraz odpowiednie użycie atrybutów i ustawień msTest. Jest to automatycznie dostępne w przypadku korzystania z pakietu MSTest lub zestawu MSTest.Sdk lub pakietu MSTest Analyzer.