Szukaj…


Wprowadzenie

Chciałbym pokazać, jak utworzyć testy jednostkowe dla aplikacji Universal Windows 10. Do testowania aplikacji UWP użyjemy frameworka xUnit.net, o którym możesz przeczytać więcej z linku podanego w sekcji uwag.

Uwagi

Możesz przeczytać więcej o xUnit Framewwork: https://xunit.github.io/docs/getting-started-uwp.html

Skonfiguruj aplikację testową

Po przygotowaniu aplikacji UWP do testów należy dodać aplikację testową do swojego rozwiązania. Aby to zrobić „kliknij prawym przyciskiem myszy” i wybierz „Unit Test App (Universal Windows)”:

wprowadź opis zdjęcia tutaj

Po dodaniu go do rozwiązania wymaga kilku dodatkowych kroków, aby go skonfigurować. Zostaniesz poproszony o wybranie docelowej i minimalnej wersji platformy:

wprowadź opis zdjęcia tutaj

Po ich wybraniu otwórz plik „project.json” i dodaj poniższe zależności:

"dependencies": 
 {
  "Microsoft.NETCore.UniversalWindowsPlatform": "5.1.0",
  "xunit.runner.visualstudio": "2.1.0",
  "xunit": "2.1.0",
  "xunit.runner.devices": "2.1.0"
 }

Służą do pobierania i dodawania pakietów NuGet xUnit Framework, aby ułatwić testy jednostkowe aplikacji UWP.

Usuń odniesienie o nazwie „MSTestFramework.Universal”:

wprowadź opis zdjęcia tutaj

Teraz otwórz plik „UnitTest.cs”. Zmodyfikuj go, aby wyglądał jak poniżej:

using System;
using Xunit;

namespace UnitTestsForUwp
{
  public class UnitTest1
   {
       [Fact]
       public void TestMethod1()
        {
          Assert.Equal(4, 4);
        }

       [Theory]
       [InlineData(6)]
       public void TestMethod2(int value)
        {
          Assert.True(IsOdd(value));
        }

       bool IsOdd(int value)
        {
          return value % 2 == 1;
        }
     }
   }
}

Warto zatrzymać się na chwilę, aby porozmawiać o atrybutach xUnit:

za. Testy faktów, które zawsze są prawdziwe. Testują niezmienne warunki.

b. Teoria - testy, które są prawdziwe tylko dla określonego zestawu danych.

Teraz chcielibyśmy przygotować aplikację do wyświetlania informacji o testach, ale nie tylko - dobrze jest mieć jeden dobry sposób na rozpoczęcie testów. Aby to osiągnąć, musimy wprowadzić niewielkie zmiany w pliku „UnitTestApp.xaml”. Otwórz i zamień cały kod na wklejony poniżej:

<ui:RunnerApplication
 x:Class="UnitTestsForUwp.App"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns:local="using:UnitTestsForUwp"
 xmlns:ui = "using:Xunit.Runners.UI"
 RequestedTheme="Light">
</ui:RunnerApplication>

Pamiętaj, że „lokalny” powinien mieć taką samą nazwę jak twoja przestrzeń nazw.

Teraz otwórz „UnitTestApp.xaml.cs” i zamień kod na poniższy:

sealed partial class App : RunnerApplication
 {
   protected override void OnInitializeRunner()
    {
      AddTestAssembly(GetType().GetTypeInfo().Assembly);
      InitializeRunner();
    }
    partial void InitializeRunner();
  }

Otóż to! Teraz odbuduj projekt i uruchom aplikację testową. Jak widać poniżej, masz dostęp do wszystkich swoich testów, możesz je uruchomić i sprawdzić wyniki:

wprowadź opis zdjęcia tutaj

Połącz aplikację testową z docelowym kodem aplikacji

Gdy aplikacja testowa jest gotowa, możesz połączyć ją z kodem, dla którego chcesz pisać testy jednostkowe.

Albo masz kod w PCL, albo w projekcie aplikacji UWP (zakładam, że zastosowałeś wzorzec MVVM), po prostu dodaj do niego odniesienie w projekcie aplikacji testowej:

wprowadź opis zdjęcia tutaj

Teraz masz dostęp do całego kodu z aplikacji testowej. Utwórz testy jednostkowe, które chcesz. Wystarczy użyć „Fakty” lub „Teorii”.

Wyśmiewaj się z niektórych funkcji

Kiedy już wszystko przygotujesz do napisania testów jednostkowych, warto wspomnieć o kpinach. Pojawiła się nowa platforma o nazwie „SimpleStubs”, która umożliwia tworzenie makiet na podstawie interfejsów.

Prosta skrzynka z dokumentacji GitHub:

//Sample interface:
public interface IPhoneBook
 {
   long GetContactPhoneNumber(string firstName, string lastName);
   long MyNumber { get; set; }
   event EventHandler<long> PhoneNumberChanged;
 }

//Mocked interface:
var stub = new StubIPhoneBook().GetContactPhoneNumber((firstName, lastName) => 6041234567);

Możesz przeczytać więcej na ten temat tutaj: https://github.com/Microsoft/SimpleStubs



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow