Udostępnij za pośrednictwem


Testowanie jednostek

Aplikacje międzyplatformowe powinny być testowane, ponieważ będą używane w świecie rzeczywistym w celu poprawy jakości, niezawodności i wydajności. W aplikacji należy wykonywać wiele typów testów, w tym testy jednostkowe, testowanie integracji i testowanie interfejsu użytkownika. Testowanie jednostkowe jest najbardziej typową formą i jest niezbędne do tworzenia aplikacji wysokiej jakości.

Test jednostkowy wykonuje małą jednostkę aplikacji, zazwyczaj metodę, izoluje ją od pozostałej części kodu i sprawdza, czy zachowuje się zgodnie z oczekiwaniami. Jego celem jest sprawdzenie, czy każda jednostka funkcjonalności działa zgodnie z oczekiwaniami, więc błędy nie są propagowane w całej aplikacji. Wykrywanie usterki, w której występuje, jest bardziej wydajne niż obserwowanie wpływu usterki pośrednio w pomocniczym punkcie awarii.

Testy jednostkowe powinny zwykle używać wzorca aranżowania asertywnego:

Krok opis
Rozmieść Zainicjuj obiekty i ustaw wartość danych przekazanych do metody testowanej.
Działaj Wywołaj metodę testową przy użyciu wymaganych argumentów.
Assert Sprawdź, czy akcja metody w ramach testu działa zgodnie z oczekiwaniami.

Ten wzorzec gwarantuje, że testy jednostkowe są czytelne, samoopisujące i spójne.

Testowanie jednostkowe ma największy wpływ na jakość kodu, gdy jest integralną częścią przepływu pracy tworzenia oprogramowania. Testy jednostkowe mogą pełnić rolę dokumentacji projektowej i specyfikacji funkcjonalnych aplikacji. Po zapisaniu metody należy napisać testy jednostkowe, które weryfikują zachowanie metody w odpowiedzi na standardowe, granice i nieprawidłowe przypadki danych wejściowych oraz sprawdzają wszelkie jawne lub niejawne założenia dokonane przez kod. Alternatywnie, w przypadku programowania opartego na testach, testy jednostkowe są zapisywane przed kodem.

Ważne

Testy jednostkowe są bardzo skuteczne w stosunku do regresji. Oznacza to, że funkcjonalność używana do pracy, ale została zakłócona przez wadliwą aktualizację.

xUnit to zalecana platforma testowa dla aplikacji .NET MAUI.

Dodawanie testów xUnit do rozwiązania .NET MAUI

Aby dodać testy xUnit do rozwiązania .NET MAUI, wykonaj następujące czynności:

Plik projektu (csproj) dla projektu testowego xUnit będzie podobny do następującego przykładu:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="coverlet.collector" Version="6.0.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
    <PackageReference Include="xunit" Version="2.5.3" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
  </ItemGroup>

  <ItemGroup>
    <Using Include="Xunit" />
  </ItemGroup>

</Project>

Właściwość $(TargetFramework) build określa platformę docelową dla projektu testowego. Będzie to najnowsza wersja platformy .NET zainstalowana na maszynie.

Pakiet xunit wprowadza pakiety podrzędne, które obejmują samą strukturę testowania, oraz analizatory Roslyn, które wykrywają typowe problemy z testami jednostkowymi. Pakiety xunit.runner.visualstudio i Microsoft.NET.Test.Sdk są wymagane do uruchamiania testów jednostkowych w programie Visual Studio, a także za dotnet test pomocą polecenia . Pakiety coverlet.collector umożliwiają zbieranie pokrycia kodu. Jeśli nie zamierzasz zbierać pokrycia kodu, możesz usunąć to odwołanie do pakietu. Aby uzyskać więcej informacji na temat pokrycia kodu na potrzeby testowania jednostkowego, zobacz Używanie pokrycia kodu do testowania jednostkowego.

Istnieją dwa główne podejścia do struktury aplikacji na potrzeby testowania jednostkowego:

  1. Kod, który będziesz testować jednostkowy, znajduje się w projekcie biblioteki klas MAUI platformy .NET.
  2. Kod, który będziesz testować jednostkowy, znajduje się w projekcie aplikacji .NET MAUI.

Każde podejście wymaga określonej konfiguracji.

Konfigurowanie projektu biblioteki klas MAUI platformy .NET na potrzeby testowania jednostkowego

Dzięki temu podejściu kod, który chcesz przetestować jednostkowy, znajduje się w projekcie biblioteki klas MAUI platformy .NET, który jest używany przez projekt aplikacji .NET MAUI. Aby napisać testy jednostkowe względem biblioteki klas .NET MAUI, należy zaktualizować platformy docelowe używane przez projekt. Można to osiągnąć, dodając wartość $(TargetFramework) właściwości kompilacji z pliku projektu testowego xUnit (csproj) do $(TargetFrameworks) właściwości kompilacji w pliku projektu biblioteki klas MAUI platformy .NET:

<TargetFrameworks>net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>

W tym przykładzie wartość net8.0 elementu została dodana do $(TargetFrameworks) właściwości kompilacji w pliku projektu biblioteki klas MAUI platformy .NET.

Następnie należy dodać odwołanie do projektu biblioteki klas .NET MAUI z projektu testowego xUnit.

Konfigurowanie projektu aplikacji .NET MAUI na potrzeby testowania jednostkowego

Dzięki temu podejściu kod, który chcesz przetestować jednostkowy, znajduje się w projekcie aplikacji MAUI platformy .NET. Aby napisać testy jednostkowe w projekcie aplikacji .NET MAUI, należy zaktualizować platformy docelowe używane przez projekt. Można to osiągnąć, dodając wartość $(TargetFramework) właściwości kompilacji z pliku projektu testowego xUnit (csproj) do $(TargetFrameworks) właściwości kompilacji w pliku projektu aplikacji .NET MAUI:

<TargetFrameworks>net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>

W tym przykładzie wartość net8.0 elementu została dodana do $(TargetFrameworks) właściwości kompilacji w pliku projektu aplikacji .NET MAUI.

Należy również zmodyfikować projekt aplikacji .NET MAUI, aby nie wyświetlał pliku wykonywalnego dla platformy docelowej używanej przez projekt testowy xUnit. Można to osiągnąć, dodając warunek do $(OutputType) właściwości kompilacji w pliku projektu aplikacji .NET MAUI:

<OutputType Condition="'$(TargetFramework)' != 'net8.0'">Exe</OutputType>

W tym przykładzie projekt aplikacji .NET MAUI tworzy plik wykonywalny tylko wtedy, gdy platforma docelowa nie net8.0jest .

Następnie należy dodać odwołanie do projektu aplikacji .NET MAUI z projektu testowego xUnit.

Pisanie testów jednostkowych

Rozszerzenie xUnit obsługuje dwa różne typy testów jednostkowych:

Typ testowania Atrybut opis
Fakty Fact Testy, które są zawsze prawdziwe, które testują niezmienne warunki.
Teorie Theory Testy, które są prawdziwe tylko dla określonego zestawu danych.

Testy jednostkowe należy umieścić w projekcie testowym xUnit i być ozdobione atrybutem [Fact] or [Theory] . W poniższym przykładzie przedstawiono testy jednostkowe używające atrybutu [Fact] :

namespace MyUnitTests
{
    public class MyTests
    {
        [Fact]
        public void PassingTest()
        {
            Assert.AreEqual(4, 2+2);
        }

        [Fact]
        public void FailingTest()
        {
            Assert.AreEqual(5, 2+2);
        }
    }
}

W tym przykładzie testy reprezentują celowe przekazywanie i niepowodzenie testu.

W poniższym przykładzie przedstawiono testy jednostkowe używające atrybutu [Theory] :

namespace MyUnitTests
{
    public class MyTests
    {
        [Theory]
        [InlineData(3)]
        [InlineData(4)]
        [InlineData(5)]
        public void MyTheoryTest(int value)
        {
            Assert.True(value % 2 == 1);
        }
    }
}

W tym przykładzie, mimo że istnieje tylko jedna metoda testowa, istnieją faktycznie trzy testy, ponieważ teoria zostanie uruchomiona raz dla każdego elementu danych.

Napiwek

Przetestuj jedną operację przy użyciu każdego testu jednostkowego. W miarę rozszerzania złożoności testu weryfikacja tego testu jest trudniejsza. Ograniczając test jednostkowy do jednego problemu, możesz upewnić się, że testy są powtarzalne, izolowane i mają krótszy czas wykonywania. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania dotyczące testowania jednostkowego.

Uruchamianie testów jednostkowych

Testy jednostkowe można uruchamiać w Eksploratorze testów w programie Visual Studio lub za dotnet test pomocą polecenia . Aby uzyskać informacje o Eksploratorze testów, zobacz Uruchamianie testów jednostkowych za pomocą Eksploratora testów. Aby uzyskać informacje o poleceniu dotnet test , zobacz Testowanie jednostkowe języka C# na platformie .NET przy użyciu testów dotnet i xUnit i dotnet test.

Uruchamianie testów jednostkowych przy użyciu modułów uruchamiającego urządzenia

Testy jednostkowe można również uruchamiać na urządzeniu z modułem uruchamiającym urządzenie. Moduł uruchamiający urządzenia to aplikacja modułu uruchamiającego testy, która udostępnia powłokę modułu uruchamiającego wizualizację i niektóre haki uruchamiane z interfejsu wiersza polecenia przy użyciu narzędzia XHarness. Aby uzyskać więcej informacji, zobacz dokumentację w witrynie typu wiki Moduły uruchamiającego urządzenia testowe.

Zobacz też