Udostępnij za pośrednictwem


Przewodnik: tworzenie i uruchamianie testów jednostkowych dla aplikacji platformy UWP

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

  1. W oknie Start programu Visual Studio wybierz pozycję Utwórz nowy projekt.

  2. Na stronie Tworzenie nowego projektu wprowadź test jednostkowy w polu Wyszukaj. Lista szablonów filtruje projekty związane z testami jednostkowymi.

  3. 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).

    Zrzut ekranu przedstawiający tworzenie nowej aplikacji testowej jednostkowej platformy UWP w programie Visual Studio.

  4. Opcjonalnie zmień nazwę i lokalizację projektu lub rozwiązania, a następnie wybierz pozycję Utwórz.

  5. 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.

Zrzut ekranu przedstawiający projekt testu jednostkowego platformy UWP w Eksploratorze rozwiązań.

  1. W oknie Start programu Visual Studio wybierz pozycję Utwórz nowy projekt.

  2. Na stronie Tworzenie nowego projektu wprowadź test jednostkowy w polu Wyszukaj. Lista szablonów filtruje projekty związane z testami jednostkowymi.

  3. Wybierz szablon Aplikacja testowa jednostkowa (uniwersalny system Windows) dla języka C# lub Visual Basic, a następnie wybierz przycisk Dalej.

    Zrzut ekranu przedstawiający tworzenie nowej aplikacji testowej jednostkowej platformy UWP w programie Visual Studio.

  4. Opcjonalnie zmień nazwę i lokalizację projektu lub rozwiązania, a następnie wybierz pozycję Utwórz.

  5. 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.

Zrzut ekranu przedstawiający projekt testu jednostkowego platformy UWP w Eksploratorze rozwiązań.

Edytowanie manifestu aplikacji projektu

  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy plik Package.appxmanifest i wybierz polecenie Otwórz.

  2. W projektancie manifestu wybierz kartę Możliwości .

  3. 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.

Zrzut ekranu przedstawiający manifest testu jednostkowego.

Zrzut ekranu przedstawiający manifest 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.

  1. W menu Test programu Visual Studio wybierz pozycję Eksplorator testów. Okno Eksploratora testów zostanie otwarte.

  2. W Eksploratorze testów wybierz ikonę Uruchom wszystko . Aby odnajdywać testy w projektach platformy UWP, należy użyć polecenia Uruchom wszystko .

    Zrzut ekranu przedstawiający ikonę Uruchom wszystko w Eksploratorze testów.

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.

Zrzut ekranu przedstawiający Eksploratora testów z ukończonymi informacjami testowymi.

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.

Zrzut ekranu przedstawiający menu kontekstowe Eksploratora testów.

Skompiluj rozwiązanie i uruchom test jednostkowy przy użyciu Eksploratora testów.

  1. W menu Test programu Visual Studio wybierz pozycję Eksplorator testów. Okno Eksploratora testów zostanie otwarte.

  2. W Eksploratorze testów wybierz ikonę Uruchom wszystko . Aby odnajdywać testy w projektach platformy UWP, należy użyć polecenia Uruchom wszystko .

    Zrzut ekranu przedstawiający ikonę Uruchom wszystko w Eksploratorze testów.

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.

Zrzut ekranu przedstawiający Eksploratora testów z ukończonymi informacjami testowymi.

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.

Zrzut ekranu przedstawiający menu kontekstowe Eksploratora testów.

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:

  1. W menu Plik programu Visual Studio wybierz pozycję Nowy projekt.
  2. 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).
  3. Na stronie Konfigurowanie nowego projektu nadaj projektowi nazwę Maths i wybierz pozycję Utwórz.
  4. 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:

  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy rozwiązanie Matematyczne i wybierz polecenie Dodaj>nowy projekt.
  2. 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).
  3. Nadaj projektowi testowe nazwę RooterTests i wybierz pozycję Utwórz.
  4. 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.

  1. W Eksploratorze rozwiązań wybierz plik UnitTest.cs w projekcie RooterTests .

  2. Wstaw następujący kod do TestMethod1pliku :

    [TestMethod]
    public void TestMethod1()
    {
        Assert.AreEqual(0, 0);
    }
    
  3. W Eksploratorze testów wybierz pozycję Uruchom wszystkie testy.

  4. 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

  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt Maths i wybierz polecenie Dodaj>klasę.

  2. Nadaj plikowi klasy nazwę Rooter.cs, a następnie wybierz pozycję Dodaj.

  3. 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ę estymatora SquareRoot. Metoda SquareRoot jest minimalną implementacją do testowania podstawowej konfiguracji testowania.

  4. Zmień słowo kluczowe na internalpublic w Rooter deklaracji klasy, aby kod testowy mógł uzyskać do niego dostęp.

    public class Rooter
    
  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt Maths i wybierz polecenie Dodaj>klasę.

  2. Nadaj plikowi klasy nazwę Rooter.cs, a następnie wybierz pozycję Dodaj.

  3. 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ę estymatora SquareRoot. Metoda SquareRoot jest minimalną implementacją do testowania podstawowej konfiguracji testowania.

  4. public Dodaj słowo kluczowe do Rooter deklaracji klasy, aby kod testowy mógł uzyskać do niego dostęp.

    public class Rooter
    

Dodawanie odwołania z projektu testowego do projektu aplikacji

  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt RooterTests i wybierz polecenie Dodaj>referencję.

  2. W Oknie dialogowym Menedżer odwołań — RooterTests rozwiń węzeł Projekty i wybierz projekt Maths .

    Zrzut ekranu przedstawiający dodawanie odwołania do projektu Maths.

  3. Kliknij przycisk OK.

  4. Dodaj następującą using instrukcję do UnitTest.cs po using Microsoft.VisualStudio.TestTools.UnitTesting; wierszu:

    using Maths;
    
  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt RooterTests i wybierz polecenie Dodaj>referencję.

  2. W Oknie dialogowym Menedżer odwołań — RooterTests rozwiń węzeł Projekty i wybierz projekt Maths .

    Zrzut ekranu przedstawiający dodawanie odwołania do projektu Maths.

  3. Kliknij przycisk OK.

  4. Dodaj następującą using instrukcję do UnitTest.cs, po wierszu using Microsoft.VisualStudio.TestTools.UnitTesting;:

    using Maths;
    

Dodawanie testu korzystającego z funkcji aplikacji

  1. 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.

  2. 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 .

  3. 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.

Zrzut ekranu przedstawiający zdanie testu podstawowego w Eksploratorze testów

W Eksploratorze testów wybierz ikonę Uruchom wszystkie testy . Rozwiązanie jest kompilowane, a testy są uruchamiane i zakończone pomyślnie.

Zrzut ekranu przedstawiający zdanie testu podstawowego w Eksploratorze testów

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.

  1. 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);
        }
    }
    
  2. Uruchom test RangeTest i sprawdź, czy kończy się niepowodzeniem.

    Zrzut ekranu przedstawiający niepowodzenie narzędzia RangeTest w Eksploratorze testów.

    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.

  3. 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;
    }
    
  4. W Eksploratorze testów wybierz ikonę Uruchom wszystkie testy . Teraz wszystkie trzy testy przechodzą.

  1. 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);
        }
    }
    
  2. Uruchom test RangeTest i sprawdź, czy kończy się niepowodzeniem.

    Zrzut ekranu przedstawiający niepowodzenie narzędzia RangeTest w Eksploratorze testów.

    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.

  3. 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;
    }
    
  4. 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

  1. 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;

  2. 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 RangeTestklasy .

Aby dodać metodę pomocnika, w UnitTest.cs:

  1. Dodaj następującą metodę do klasy UnitTest1:

    private double ToleranceHelper(double expected)
    {
        return expected / 1000;
    }
    
  2. W RangeTestpliku zmień następujący wiersz:

    double tolerance = expected/1000;

    Do

    double tolerance = ToleranceHelper(expected);

  3. 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 .

Dalsze kroki