Поиск…


Вступление

Я хотел бы показать вам, как создавать модульные тесты для универсального приложения Windows 10. Для тестирования приложений UWP мы будем использовать xUnit.net Framework, о которых вы можете прочитать больше из ссылки, представленной в разделе замечаний.

замечания

Вы можете узнать больше о xUnit Framewwork: https://xunit.github.io/docs/getting-started-uwp.html

Настроить тестовое приложение

После того, как ваше приложение UWP готово к тестированию, вы должны добавить тестовое приложение к своему решению. Чтобы сделать это «правильно», нажмите на решение и выберите «Unit Test App (Universal Windows)»:

введите описание изображения здесь

Как только вы добавите его в решение, для его настройки требуется еще несколько шагов. Вам будет предложено выбрать целевую и минимальную версию платформы:

введите описание изображения здесь

Выбрав их, откройте файл project.json и добавьте ниже зависимости:

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

Они используются для загрузки и добавления пакетов NuGet xUnit Framework для упрощения модульных тестов для приложения UWP.

Удалите ссылку под названием «MSTestFramework.Universal»:

введите описание изображения здесь

Теперь откройте файл «UnitTest.cs». Измените это, чтобы выглядеть следующим образом:

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;
        }
     }
   }
}

Хорошо остановиться здесь, чтобы немного поговорить о атрибутах xUnit:

а. Факт-тесты, которые всегда верны. Они проверяют инвариантные условия.

б. Теория - тесты, которые справедливы только для определенного набора данных.

Теперь мы хотели бы подготовить приложение для отображения информации об испытаниях, но не только - хорошо иметь один хороший способ начать тесты. Для этого нам нужно внести небольшие изменения в файл «UnitTestApp.xaml». Откройте его и замените весь код следующим:

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

Помните, что «local» должен иметь то же имя, что и ваше пространство имен.

Теперь откройте «UnitTestApp.xaml.cs» и замените код ниже:

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

Это оно! Теперь перестройте проект и запускайте тестовое приложение. Как вы можете видеть ниже, у вас есть доступ ко всем вашим тестам, вы можете запустить их и проверить результаты:

введите описание изображения здесь

Подключить тестовое приложение с целевым кодом приложения

Когда тестовое приложение будет готово, вы можете подключить его к коду, для которого вы хотите написать модульные тесты.

Либо у вас есть код в PCL, либо в проекте приложения UWP (я предполагаю, что вы применили шаблон MVVM) просто добавьте ссылку на него в проекте Test Application:

введите описание изображения здесь

Теперь у вас есть доступ ко всему вашему коду из тестового приложения. Создайте необходимые тесты. Просто используйте «Факты» или «Теории».

Выполнить некоторые функции

Как только у вас есть все готово для написания ваших тестов единиц, стоит упомянуть насмешку. Существует новая структура под названием «SimpleStubs», которая позволяет создавать макеты на основе интерфейсов.

Простой случай из документации 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);

Подробнее об этом можно узнать здесь: https://github.com/Microsoft/SimpleStubs



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow