Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano sposób testowania jednostkowego aplikacji platformy uniwersalnej systemu Windows (UWP) w programie Visual Studio. Program Visual Studio oferuje szablony projektów testów jednostkowych platformy UWP dla języków C#, Visual Basic i C++. Aby uzyskać więcej informacji na temat tworzenia aplikacji UWP, zobacz Wprowadzenie do aplikacji platformy UWP.
W artykule opisano przykład tworzenia i testowania jednostkowego klasy C# w aplikacji UWP. W przykładzie użyto programowania opartego na testach do pisania testów, które weryfikują określone zachowania, a następnie napisz kod, który przechodzi testy.
Tworzenie i uruchamianie projektu testów jednostkowych
Poniższe procedury opisują sposób tworzenia i uruchamiania projektów testów jednostkowych dla aplikacji platformy UWP.
Tworzenie projektu testów jednostkowych platformy UWP
W oknie Start programu Visual Studio wybierz pozycję Utwórz nowy projekt.
Na stronie Tworzenie nowego projektu wprowadź test jednostkowy w polu Wyszukaj. Lista szablonów filtruje projekty związane z testami jednostkowymi.
Wybierz prawidłowy szablon testowania jednostkowego platformy UWP dla języka C# lub Visual Basic, a następnie wybierz przycisk Dalej.
Począwszy od programu Visual Studio 2022 w wersji 17.14, zalecanym szablonem testowania jednostkowego dla języka C# i platformy .NET 9 jest aplikacja do testowania jednostkowego platformy UWP i jest przeznaczona dla natywnej AOT. Starsze szablony UWP nazywają się Aplikacja do testowania jednostkowego UWP (.NET Native) i Aplikacja testowa jednostkowa (uniwersalny Windows).
Opcjonalnie zmień nazwę i lokalizację projektu lub rozwiązania, a następnie wybierz pozycję Utwórz.
Opcjonalnie zmień wersje platformy docelowej i minimalnej, a następnie wybierz przycisk OK.
Program Visual Studio tworzy projekt testowy i otwiera go w Eksploratorze rozwiązań programu Visual Studio.
W oknie Start programu Visual Studio wybierz pozycję Utwórz nowy projekt.
Na stronie Tworzenie nowego projektu wprowadź test jednostkowy w polu Wyszukaj. Lista szablonów filtruje projekty związane z testami jednostkowymi.
Wybierz szablon Aplikacja testowa jednostkowa (uniwersalny system Windows) dla języka C# lub Visual Basic, a następnie wybierz przycisk Dalej.
Opcjonalnie zmień nazwę i lokalizację projektu lub rozwiązania, a następnie wybierz pozycję Utwórz.
Opcjonalnie zmień wersje platformy docelowej i minimalnej, a następnie wybierz przycisk OK.
Program Visual Studio tworzy projekt testowy i otwiera go w Eksploratorze rozwiązań programu Visual Studio.
Edytowanie manifestu aplikacji projektu
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy plik Package.appxmanifest i wybierz polecenie Otwórz.
W projektancie manifestu wybierz kartę Możliwości .
Na liście Możliwości wybierz wymagane możliwości dla kodu i testu jednostkowego. Jeśli na przykład kod i jego test jednostkowy muszą uzyskać dostęp do Internetu, zaznacz pole wyboru Internet .
Wybierz tylko możliwości, które są potrzebne do poprawnego działania testu jednostkowego.
Dodaj kod do testowania jednostkowego aplikacji UWP
W edytorze programu Visual Studio Code zmodyfikuj plik kodu testu jednostkowego, aby dodać wymagane potwierdzenia i logikę testów. Aby zapoznać się z przykładami, zobacz Unit test a C# class (Test jednostkowy klasy języka C#) w dalszej części tego artykułu.
Uruchamianie testu jednostkowego za pomocą Eksploratora testów
Skompiluj rozwiązanie i uruchom test jednostkowy przy użyciu Eksploratora testów.
W menu Test programu Visual Studio wybierz pozycję Eksplorator testów. Okno Eksploratora testów zostanie otwarte.
W Eksploratorze testów wybierz ikonę Uruchom wszystko . Aby odnajdywać testy w projektach platformy UWP, należy użyć polecenia Uruchom wszystko .
Rozwiązanie się wykompiluje, a test jednostkowy się uruchomi. Po uruchomieniu testu test zostanie wyświetlony na liście testów Eksploratora testów z informacjami o wyniku i czasie trwania.
Również w Eksploratorze testów możesz wybrać poszczególne testy i kliknąć prawym przyciskiem myszy, aby uruchomić lub debugować testy, lub przejdź do testu , aby otworzyć kod testowy. Z górnego menu można grupować testy, dodawać testy do list odtwarzania lub otwierać opcje testu.
Skompiluj rozwiązanie i uruchom test jednostkowy przy użyciu Eksploratora testów.
W menu Test programu Visual Studio wybierz pozycję Eksplorator testów. Okno Eksploratora testów zostanie otwarte.
W Eksploratorze testów wybierz ikonę Uruchom wszystko . Aby odnajdywać testy w projektach platformy UWP, należy użyć polecenia Uruchom wszystko .
Rozwiązanie się wykompiluje, a test jednostkowy się uruchomi. Po uruchomieniu testu test zostanie wyświetlony na liście testów Eksploratora testów z informacjami o wyniku i czasie trwania.
Również w Eksploratorze testów możesz wybrać poszczególne testy i kliknąć prawym przyciskiem myszy, aby uruchomić lub debugować testy, lub przejdź do testu , aby otworzyć kod testowy. W górnym menu można grupować testy, dodawać testy do list odtwarzania lub otwierać opcje testu.
Test jednostkowy klasy C#
Stabilny zestaw dobrych testów jednostkowych zwiększa pewność, że błędy nie zostały wprowadzone podczas zmiany kodu. W poniższym przykładzie przedstawiono jeden ze sposobów tworzenia testów jednostkowych dla klasy C# w aplikacji platformy UWP. W przykładzie użyto programowania opartego na testach do pisania testów, które weryfikują określone zachowanie, a następnie pisania kodu, który przechodzi testy.
W przykładowym projekcie kodu Maths klasa Rooter implementuje funkcję, która oblicza szacowany pierwiastek kwadratowy liczby. Jednostka projektu RooterTests testuje klasę Rooter .
Tworzenie rozwiązania i projektów
Utwórz projekt aplikacji UWP dla systemu Windows:
- W menu Plik programu Visual Studio wybierz pozycję Nowy projekt.
- Na stronie Tworzenie nowego projektu wprowadź pustą aplikację w polu Wyszukaj, a następnie wybierz szablon projektu Pusta aplikacja w języku C# (uniwersalna aplikacja systemu Windows).
- Na stronie Konfigurowanie nowego projektu nadaj projektowi nazwę Maths i wybierz pozycję Utwórz.
- Opcjonalnie zmień wersje platformy docelowej i minimalnej, a następnie wybierz przycisk OK. Program Visual Studio tworzy projekt i otwiera go w Eksploratorze rozwiązań.
Utwórz projekt testu jednostkowego:
- W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy rozwiązanie Matematyczne i wybierz polecenie Dodaj>nowy projekt.
- Na stronie Dodawanie nowego projektu wprowadź test jednostkowy w polu Wyszukaj, a następnie wybierz szablon projektu Aplikacja testowa jednostkowa języka C# (uniwersalny system Windows).
- Nadaj projektowi testowe nazwę RooterTests i wybierz pozycję Utwórz.
- Opcjonalnie zmień wersje platformy docelowej i minimalnej, a następnie wybierz przycisk OK. Projekt RooterTests jest wyświetlany w obszarze rozwiązania Maths w Eksploratorze rozwiązań.
Sprawdzanie, czy testy są uruchamiane w Eksploratorze testów
Klasa Assert udostępnia kilka metod statycznych, których można użyć do weryfikowania wyników w metodach testowych.
W Eksploratorze rozwiązań wybierz plik UnitTest.cs w projekcie RooterTests .
Wstaw następujący kod do
TestMethod1
pliku :[TestMethod] public void TestMethod1() { Assert.AreEqual(0, 0); }
W Eksploratorze testów wybierz pozycję Uruchom wszystkie testy.
Projekt testowy kompiluje się i uruchamia, a test jest wyświetlany w obszarze Zaliczone testy. Okienko Podsumowanie grupy po prawej stronie zawiera szczegółowe informacje o teście.
Dodawanie klasy do projektu aplikacji
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt Maths i wybierz polecenie Dodaj>klasę.
Nadaj plikowi klasy nazwę Rooter.cs, a następnie wybierz pozycję Dodaj.
W edytorze kodu dodaj następujący kod do
Rooter
klasy w pliku Rooter.cs :public Rooter() { } // estimate the square root of a number public double SquareRoot(double x) { return 0.0; }
Klasa
Rooter
deklaruje konstruktor i metodę estymatoraSquareRoot
. MetodaSquareRoot
jest minimalną implementacją do testowania podstawowej konfiguracji testowania.Zmień słowo kluczowe na
internal
public
wRooter
deklaracji klasy, aby kod testowy mógł uzyskać do niego dostęp.public class Rooter
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt Maths i wybierz polecenie Dodaj>klasę.
Nadaj plikowi klasy nazwę Rooter.cs, a następnie wybierz pozycję Dodaj.
W edytorze kodu dodaj następujący kod do
Rooter
klasy w pliku Rooter.cs :public Rooter() { } // estimate the square root of a number public double SquareRoot(double x) { return 0.0; }
Klasa
Rooter
deklaruje konstruktor i metodę estymatoraSquareRoot
. MetodaSquareRoot
jest minimalną implementacją do testowania podstawowej konfiguracji testowania.public
Dodaj słowo kluczowe doRooter
deklaracji klasy, aby kod testowy mógł uzyskać do niego dostęp.public class Rooter
Dodawanie odwołania z projektu testowego do projektu aplikacji
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt RooterTests i wybierz polecenie Dodaj>referencję.
W Oknie dialogowym Menedżer odwołań — RooterTests rozwiń węzeł Projekty i wybierz projekt Maths .
Kliknij przycisk OK.
Dodaj następującą
using
instrukcję do UnitTest.cs pousing Microsoft.VisualStudio.TestTools.UnitTesting;
wierszu:using Maths;
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt RooterTests i wybierz polecenie Dodaj>referencję.
W Oknie dialogowym Menedżer odwołań — RooterTests rozwiń węzeł Projekty i wybierz projekt Maths .
Kliknij przycisk OK.
Dodaj następującą
using
instrukcję do UnitTest.cs, po wierszuusing Microsoft.VisualStudio.TestTools.UnitTesting;
:using Maths;
Dodawanie testu korzystającego z funkcji aplikacji
Dodaj następującą metodę testową do UnitTest.cs:
[TestMethod] public void BasicTest() { Maths.Rooter rooter = new Rooter(); double expected = 0.0; double actual = rooter.SquareRoot(expected * expected); double tolerance = .001; Assert.AreEqual(expected, actual, tolerance); }
Nowy test jest wyświetlany w Eksploratorze rozwiązań i w węźle Nie uruchamiaj testóww Eksploratorze testów.
Aby uniknąć błędu "Ładunek zawiera co najmniej dwa pliki z tą samą ścieżką docelową", w Eksploratorze rozwiązań rozwiń węzeł Właściwości w projekcie Maths i usuń plik Default.rd.xml .
Zapisz wszystkie pliki.
Uruchamianie testów
W Eksploratorze testów wybierz ikonę Uruchom wszystkie testy . Rozwiązanie jest kompilowane, a testy są uruchamiane i zakończone pomyślnie.
W Eksploratorze testów wybierz ikonę Uruchom wszystkie testy . Rozwiązanie jest kompilowane, a testy są uruchamiane i zakończone pomyślnie.
Jeśli podczas uruchamiania testu pojawi się błąd "Zduplikowana jednostka", usuń plik dyrektyw uruchomieniowych Properties\Default.rd.xml
z projektu testowego i spróbuj ponownie.
Skonfigurowano projekty testów i aplikacji oraz sprawdzono, że można uruchamiać testy wywołujące funkcje w projekcie aplikacji. Teraz możesz napisać prawdziwe testy i kod.
Dodaj testy i spraw, aby przeszły
Najlepiej nie zmieniać testów, które przeszły. Zamiast tego dodaj nowe testy. Twórz kod, dodając testy pojedynczo i upewnij się, że wszystkie testy kończą się powodzeniem po każdej iteracji.
Dodaj nowy test o nazwie
RangeTest
do UnitTest.cs:[TestMethod] public void RangeTest() { Rooter rooter = new Rooter(); for (double v = 1e-6; v < 1e6; v = v * 3.2) { double expected = v; double actual = rooter.SquareRoot(v*v); double tolerance = expected/1000; Assert.AreEqual(expected, actual, tolerance); } }
Uruchom test RangeTest i sprawdź, czy kończy się niepowodzeniem.
Wskazówka
Podczas programowania opartego na testach uruchamiasz test natychmiast po jego zapisaniu. Ta praktyka pomaga uniknąć łatwego błędu podczas pisania testu, który nigdy nie kończy się niepowodzeniem.
Napraw kod aplikacji, aby nowy test przebiegł pomyślnie. W Rooter.cs zmień
SquareRoot
funkcję w następujący sposób:public double SquareRoot(double x) { double estimate = x; double diff = x; while (diff > estimate / 1000) { double previousEstimate = estimate; estimate = estimate - (estimate * estimate - x) / (2 * estimate); diff = Math.Abs(previousEstimate - estimate); } return estimate; }
W Eksploratorze testów wybierz ikonę Uruchom wszystkie testy . Teraz wszystkie trzy testy przechodzą.
Dodaj nowy test o nazwie
RangeTest
do UnitTest.cs:[TestMethod] public void RangeTest() { Rooter rooter = new Rooter(); for (double v = 1e-6; v < 1e6; v = v * 3.2) { double expected = v; double actual = rooter.SquareRoot(v*v); double tolerance = expected/1000; Assert.AreEqual(expected, actual, tolerance); } }
Uruchom test RangeTest i sprawdź, czy kończy się niepowodzeniem.
Wskazówka
Podczas programowania opartego na testach uruchamiasz test natychmiast po jego zapisaniu. Ta praktyka pomaga uniknąć łatwego błędu podczas pisania testu, który nigdy nie kończy się niepowodzeniem.
Napraw kod aplikacji, aby nowy test przebiegł pomyślnie. W Rooter.cs zmień
SquareRoot
funkcję w następujący sposób:public double SquareRoot(double x) { double estimate = x; double diff = x; while (diff > estimate / 1000) { double previousEstimate = estimate; estimate = estimate - (estimate * estimate - x) / (2 * estimate); diff = Math.Abs(previousEstimate - estimate); } return estimate; }
W Eksploratorze testów wybierz ikonę Uruchom wszystkie testy . Teraz wszystkie trzy testy przechodzą.
Refaktoryzacja kodu
W tej sekcji refaktoryzujesz zarówno aplikację, jak i kod testowy, a następnie ponownie uruchomisz testy, aby upewnić się, że nadal przechodzą.
Upraszczanie szacowania pierwiastek kwadratowych
W Rooter.cs uprościć centralne obliczenia w
SquareRoot
funkcji, zmieniając następujący wiersz:estimate = estimate - (estimate * estimate - x) / (2 * estimate);
Do
estimate = (estimate + x/estimate) / 2.0;
Uruchom wszystkie testy, aby upewnić się, że nie wprowadzono regresji. Wszystkie testy powinny zostać wykonane pomyślnie.
Usuwanie zduplikowanego kodu testowego
Metoda RangeTest
zakodowuje na stałe mianownik zmiennej tolerance
, która jest przekazywana do metody Assert. Jeśli planujesz dodać więcej testów korzystających z tego samego obliczenia tolerancji, użycie wartości zakodowanej w kilku lokalizacjach utrudnia konserwację kodu. Zamiast tego możesz dodać prywatną metodę pomocnika do UnitTest1
klasy, aby obliczyć wartość tolerancji, a następnie wywołać tę metodę z RangeTest
klasy .
Aby dodać metodę pomocnika, w UnitTest.cs:
Dodaj następującą metodę do klasy
UnitTest1
:private double ToleranceHelper(double expected) { return expected / 1000; }
W
RangeTest
pliku zmień następujący wiersz:double tolerance = expected/1000;
Do
double tolerance = ToleranceHelper(expected);
Uruchom test RangeTest, aby upewnić się, że wciąż go zalicza.
Wskazówka
Jeśli dodasz metodę pomocnika do klasy testowej i nie chcesz, aby metoda pomocnika pojawiła się na liście w Eksploratorze testów, nie dodawaj TestMethodAttribute atrybutu do metody .