Модульное тестирование в 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(); }
Таким образом, при запуске приложения отображается модуль запуска тестового модуля: вы можете увидеть его самостоятельно, запустив приложение в эмуляторе. На первом экране вас спросят, хотите ли вы использовать теги или нет (позже мы увидим, в чем их цель): если вы нажмете кнопку « Воспроизвести» на панели приложений, вы будете перенаправлены в главное окно программы запуска модульных тестов. , даже если вы не увидите никаких тестов в данный момент, так как мы еще не добавили ни одного теста.
Следующим шагом является создание одного или нескольких классов, которые будут содержать наши тесты: в реальном сценарии мы создали бы класс модульных тестов для каждого реального класса, который нам нужно протестировать. Для этого примера, мы просто собираемся создать единый класс: мы можем поместить его везде , где мы хотим , но, чтобы сохранить структуру проекта , организованного, мы добавим новый 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.
Давайте проверим случай неудачи: изменим условие, которое проверяется таким образом, что больше не соответствует действительности, как в примере:
[TestClass] public class SimpleUnitTest { [TestMethod] public void SimpleTest() { int a = 1; int b = 2; int c = a + b; Assert.IsTrue(c == 4); } }
Запустите приложение снова: на этот раз вы увидите, что тест не пройден. Нажав на тест, вы увидите детали и причины его неудачи: в этом случае вы четко поймете, что операция Assert.IsTrue не удалась.
Использование тегов
Иногда вы не хотите запускать все тесты, доступные в ваших классах, а просто подмножества: для этого и нужны теги. Чтобы использовать их, вы должны добавить в свой тестовый класс пространство имен 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, вы можете просто установить точки останова в ваших методах тестирования: они будут поражены при выполнении тестов, и вы можете перейти к коду, чтобы увидеть, что происходит.
Асинхронные тесты, насмешки и многое другое
В следующем посте мы рассмотрим некоторые продвинутые, но довольно распространенные сценарии, такие как макетирование и тестирование асинхронных методов. Продолжайте в том же духе!
конец