uwp
Testy jednostkowe dla UWP
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)”:
Po dodaniu go do rozwiązania wymaga kilku dodatkowych kroków, aby go skonfigurować. Zostaniesz poproszony o wybranie docelowej i minimalnej wersji platformy:
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”:
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:
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:
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