Статьи

Модульное тестирование Windows Phone 8 — Основы

Модульное тестирование в Windows Phone никогда не поддерживалось Microsoft: единственный полуофициальный способ проведения модульных тестов в Windows Phone 7 — это адаптация платформы Silverlight Unit Test Framework, разработанной Джеффом Уилкоксом. Эта библиотека может отображать приложение Windows Phone, которое может запускать модульные тесты, включенные в проект. Недостатком этого подхода является то, что для запуска тестов необходимо использовать специальное приложение Windows Phone, а не встроенный инструмент, такой как Resharper. Вместо этого самое большое преимущество заключается в том, что модульные тесты выполняются в реальной среде, поэтому легко написать интеграционные тесты, которые используют, например, хранилище или реальное подключение к Интернету.

Поскольку модульные тесты являются важной частью каждого проекта, особенно самого сложного, Microsoft теперь адаптировала среду модульного тестирования Silverlight для Windows Phone 8, отбросив часть имени Silverlight и добавив ее как часть нового Windows Phone 8. Инструментарий. Давайте посмотрим, как его использовать, как запускать простые тесты и, в следующем посте, как справляться с некоторыми более сложными сценариями (такими как насмешка и работа с асинхронными методами).

Подготовка окружающей среды

Как я и ожидал, тесты выполняются в отдельном приложении для Windows Phone: по этой причине вам придется добавить еще один проект для Windows Phone в свое решение. После того, как вы это сделали, вы можете установить инструментарий Windows Phone из NuGet и среду модульного тестирования : теперь мы готовы к настройке приложения.

Первым делом откройте код файла MainPage, то есть MainPage.xaml.cs, и добавьте в конструктор, прямо под методом InitializeComponent () , следующий код:

public MainPage()
{
    InitializeComponent();
    this.Content = UnitTestSystem.CreateTestPage();
}

Таким образом, при запуске приложения отображается модуль запуска тестового модуля: вы можете увидеть его самостоятельно, запустив приложение в эмуляторе. На первом экране вас спросят, хотите ли вы использовать теги или нет (позже мы увидим, в чем их цель): если вы нажмете кнопку « Воспроизвести» на панели приложений, вы будете перенаправлены в главное окно программы запуска модульных тестов. , даже если вы не увидите никаких тестов в данный момент, так как мы еще не добавили ни одного теста.

раздел 1

Следующим шагом является создание одного или нескольких классов, которые будут содержать наши тесты: в реальном сценарии мы создали бы класс модульных тестов для каждого реального класса, который нам нужно протестировать. Для этого примера, мы просто собираемся создать единый класс: мы можем поместить его везде , где мы хотим , но, чтобы сохранить структуру проекта , организованного, мы добавим новый foldercalled UnitTests , и мы добавим новый класс там: в мой пример, я назвал это SimpleUnitTest . Чтобы добавить его, просто щелкните правой кнопкой мыши новую папку, выберите « Добавить» — «Новый элемент» и добавьте файл класса .

Первое, что нужно сделать, это добавить пространство имен Microsoft.VisualStudio.TestTools.UnitTesting вверху вашего класса: таким образом, мы сможем получить доступ к атрибутам и классам, необходимым для тестирования нашего кода. Второй шаг — пометить весь класс атрибутом [TestClass] : так мы скажем приложению, что этот класс содержит модульные тесты, которые должны быть обработаны и выполнены.

Теперь давайте добавим простой модульный тест (если честно, он более глупый, чем простой Улыбка): цель состоит в том, чтобы просто освоить основы.

[TestClass]
public class SimpleUnitTest
{
    [TestMethod]
    public void SimpleTest()
    {
        int a = 1;
        int b = 2;
 
        int c = a + b;
 
        Assert.IsTrue(c == 3);
    }
}

Обратите внимание на атрибут [TestMethod], который мы использовали для обозначения метода SimpleTest : с помощью этого атрибута мы сообщаем приложению, что этот метод на самом деле содержит модульный тест, который должен быть выполнен. Тест действительно глуп: мы суммируем два числа и проверяем правильность суммы, используя класс Assert , который содержит различные методы, которые можно использовать для проверки результатов нашего теста. В этом случае нам нужно протестировать логическое условие, чтобы мы могли использовать метод IsTrue . Другими примерами методов являются IsNotNull (для проверки того, что объект действительно имеет значение) или IsInstanceOfType (для проверки того, является ли тип объекта тем, который мы ожидаем).

Запустите приложение и запустите тесты: на этот раз вы увидите тестовый прогон и вам будут предложены результаты. Очевидно, в этом случае тест пройдет, так как 1 + 2 = 3.

модуль 2

Давайте проверим случай неудачи: изменим условие, которое проверяется таким образом, что больше не соответствует действительности, как в примере:

[TestClass]
public class SimpleUnitTest
{
    [TestMethod]
    public void SimpleTest()
    {
        int a = 1;
        int b = 2;
 
        int c = a + b;
 
        Assert.IsTrue(c == 4);
    }
}

Запустите приложение снова: на этот раз вы увидите, что тест не пройден. Нажав на тест, вы увидите детали и причины его неудачи: в этом случае вы четко поймете, что операция Assert.IsTrue не удалась.

unit3

Использование тегов

Иногда вы не хотите запускать все тесты, доступные в ваших классах, а просто подмножества: для этого и нужны теги. Чтобы использовать их, вы должны добавить в свой тестовый класс пространство имен Microsoft.Phone.Testing, которое позволит вам украсить тестовый метод атрибутом Tag с последующим ключевым словом. Чтобы увидеть эту функцию в действии, давайте добавим еще один метод тестирования: мы установим атрибут Tag только для одного из них.

[TestClass]
public class SimpleUnitTest
{ 
    [Tag("SimpleTests")]
    [TestMethod]
    public void SimpleTest()
    {
        int a = 1;
        int b = 2;
 
        int c = a + b;
 
        Assert.IsTrue(c == 3);
    }
 
    [TestMethod]
    public void SimpleTest2()
    {
        int a = 3;
        int b = 1;
 
        int c = a + b;
 
        Assert.IsTrue(c == 4);
    }
}

Теперь снова запустите приложение и на этот раз на первом экране переключите переключатель Использовать теги в положение Вкл . Вам будет предложено указать ключевое слово, которое будет использоваться приложением для определения того, какой тестовый прогон: вставьте ключевое слово SimpleTests (тэг, который мы установили для тестового метода SimpleTest ) и нажмите кнопку «Воспроизвести». Вы увидите, что, несмотря на то, что в вашем классе есть два метода тестирования, будет выполнен только первый.

Пометка тегов — отличный способ сгруппировать модульные тесты, так что если вам нужно протестировать только определенный класс или функцию, вам не нужно проходить все модульные тесты.

Отладка

Если тест не пройден и вы не знаете, его действительно легко отладить: поскольку, когда вы запускаете модуль модульного теста из Visual Studio, вы запускаете стандартное приложение Windows Phone, вы можете просто установить точки останова в ваших методах тестирования: они будут поражены при выполнении тестов, и вы можете перейти к коду, чтобы увидеть, что происходит.

Асинхронные тесты, насмешки и многое другое

В следующем посте мы рассмотрим некоторые продвинутые, но довольно распространенные сценарии, такие как макетирование и тестирование асинхронных методов. Продолжайте в том же духе!

конец