Подтвердить что ты не робот

Состояние модульного тестирования для Windows Phone

Я подталкивал свой Google Fu к ограничениям, пытаясь найти наиболее рекомендуемую/стабильную настройку для работы с TDD + CI для приложений Windows Phone. Может ли кто-нибудь, кто успешно это сделал, направить меня в правильном направлении?

Вот что я хочу сделать (если это возможно):

  • Напишите модульные тесты для моделей просмотра и служб приложений, не требующих функциональности телефона.
  • Выполнять тесты непосредственно в Visual Studio через Resharper или TD.NET
  • Выполнение модульных тестов из командной строки с помощью XML out, без запуска эмулятора
  • Желательно быть резидентным (по мере того, как распространяются сторонние библиотеки) до обновлений SDK

Так как я хотел бы сохранить этот вопрос в качестве ресурса для других, ищущих то же самое, вот что я предпочел бы избежать ответов:

  • Порт с открытым исходным кодом для проектов, которые либо неполны, либо оставлены
  • Проекты, доступные только в виде прикрепленного файла в блоге.

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

4b9b3361

Ответ 1

Я добавляю этот ответ как Community Wiki, чтобы другие могли его модифицировать, чтобы поддерживать его в актуальном состоянии.

Тестирование устройств

Намерение: для запуска изолированного (без функций телефона) быстрого выполнения тестов часто с сервера IDE и Continuous Integration, не требуя эмулятора (например, модели TDD)

Метод, который я видел в нескольких презентациях, включает ссылки на ваши исходные файлы в проекте .NET 4 и выполнение тестов с ними (ссылаясь на эквиваленты рабочего стола в сборках). Если ваш код не использует какие-либо API-интерфейсы, отличные от настольных BCL, и вы можете справиться с обновлением эталонного проекта (новые файлы не будут добавляться автоматически), чем этого должно быть достаточно.

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

  • Добавить тесты Silverlight 4 Class Library (не Silverlight для проекта Windows Phone) в ваше решение
  • В библиотеке классов установите Copy Local для всех ссылок на фреймворк кроме mscorelib (в основном System. * и Microsoft. *) на true
  • Добавьте ссылку из этой тестовой библиотеки в NUnit.Silverlight.Framework.dll и NUnit.Silverlight.Compatibility.dll из проект NUnit-Silverlight
  • Добавьте ссылку из тестовой библиотеки в основной проект Windows Phone, игнорируя предупреждение о версии.
  • Запустите тесты из среды IDE с помощью ReSharper (проверено) или TestDriven.NET
  • Запустите тесты из командной строки с помощью стандартного .NET 2.0 nunit-console.exe из последней версии NUnit, передав /framework=v4.0.

(Многие из вышеперечисленных обходных решений требуются, поскольку WP7 использует SL3. После того, как Mango будет выпущен со средой SL4, она должна быть более чистой).

Тестирование интеграции

Намерение: для запуска более длительных тестов, которые взаимодействуют с ресурсами, внешними по отношению к коду (например, функциями телефона и веб-службам) на эмуляторе, как по запросу, так и на сервере CI

UPDATE Тестирование устройств Windows Phone 8 приложений будет официально поддерживаться в Visual Studio 2012 Update 2, включая VS интеграции и поддержки командной строки. Эти тесты запускаются в эмуляторе, поэтому я включил его в "Интеграционные тесты".

В настоящее время это не поддерживается WP7-интерфейсом платформы тестирования Silverlight (и который поставляется только в виде загрузки из блога).

Тем временем я создал проект codeplex, который добавляет задачу MSBuild, которая запускает эмулятор и сопоставляет результаты в XML файл, Простейшей установкой метода является добавление пакета wp7-ci NuGet.

ПРИМЕЧАНИЕ. Установка WP7 SDK на Windows Server требует изменения конфигурации установщика и не поддерживается, но работает хорошо.

Принятие/тестирование системы

Цель: запускать сквозные автоматические тесты, которые взаимодействуют с пользовательским интерфейсом телефона на эмуляторе, как по запросу, так и на сервере CI.

Expensify (плохо названный для SEO) Windows Phone Test Framework поддерживает запись тестов автоматизации пользовательского интерфейса с главного компьютера с использованием SpecFlow.

Ответ 2

Я думаю, что это связано с тем, как вы пишете свои тесты.

  • В конце концов, какой-то код придется коснуться некоторых конкретных вещей. Те должны быть изолированы как зависимости и поддельные. Я не нашел подходящего способа, чтобы тесты модулей выполнялись в самом телефоне. К сожалению, эти зависимости остаются непроверенными для меня.
  • Использование NUnit для Silverlight позволяет получить утверждения: http://code.google.com/p/nunit-silverlight/
  • Я использовал Resharper для запуска модульных тестов без проблем. Аналогично, вы можете использовать nunit-console для запуска тестов и получения XML-вывода.
  • Ayende Rhino Mocks для Silverlight отлично работает для насмешек /stubbing зависимостей.
  • Непрерывная интеграция была немного сложной. WP7 SDK недоступен для платформы Server, поэтому я создал новую версию для Windows 7 для своего CI. Могут быть способы обойти это ограничение, но я не беспокоился.

Другим инструментом, который вам нужен, является MVVMLight. Это позволит вам использовать EventTrigger и ICommand вместо событий, так как тестирование событий значительно больше работы и не может быть связано через DataContext.

Насколько я разработал свое приложение:

ViewModel может принимать любое количество зависимостей, которые разрешаются с помощью MicroIoC.

Фактический код XAML разрешил ViewModel и задал его в контексте данных. Это неудачно, потому что это означает, что вы не можете установить DataContext в XAML, но это был компромисс, который я хотел принять для инъекции зависимостей, например:

public partial class SignUpPage
{
    public SignUpPage()
    {
        InitializeComponent();
        DataContext = IoC.Resolve<SignUpViewModel>();
    }
}

К счастью, это единственный код С#, который действительно появляется в моем коде XAML. Оттуда он довольно регулярный MVVM с использованием привязки и DataContext.

Теперь вы можете протестировать свой ViewModel, ввести необходимые зависимости (или подделать их), и он будет работать нормально, не будучи в эмуляторе, если вы не пытаетесь использовать что-то определенное WP7.

Ответ 3

Вот ссылка на тех, кому удалось автоматизировать тесты WP7 на телефоне, автоматически развертывать приложение, запускать тесты и читать результаты: http://justinangel.net/WindowsPhone7EmulatorAutomation

Он использует API CoreCon, который выглядел очень интересным, пока я не начал играть с ним, и обнаружил, что большинство функций не выбрасывали - реализованы исключения - но их достаточно, чтобы выполнить автоматические тесты.

Ответ 5

Ну, есть как минимум 3 разных способа сделать TDD для приложений Windows Phone.

  • Silverlight Unit Test Framework - написан Джеффом Уилкокс. Здесь вы можете найти последнее обновление. По-видимому, это самый популярный способ, есть много информации об этом подходе:

    Также проверьте шаблон тестового проекта Visual Studio, чтобы вам не нужно было создавать тестовый проект вручную. Однако это решение требует запуска ваших тестов на эмуляторе телефона, что иногда может быть очень раздражающим.

  • Portable Library Tools - новая надстройка Visual Studio от Microsoft, которая позволяет создавать библиотеки С# и Visual Basic, которые работают на разных платформах .NET без перекомпиляции, включая Windows Phone.

    Проверьте это сообщение, чтобы узнать, как сделать TDD для Windows Phone с помощью Portable Library Tools. Здесь вы можете найти расширение Visual Studio.

    Недостатком этого подхода является то, что эта библиотека имеет ограниченную поддержку сборок, поэтому, скорее всего, вы не можете использовать все, что вы использовали. Например, вы не можете использовать команды (поскольку ICommand живет в PresentationCore.dll), вы также не можете использовать MVVMLight и т.д. С другой стороны, это дает вам больше гибкости в вашем тестовом проекте (вы можете использовать различные макеты фреймворков, контейнеры IoC запускать тесты от VS, запуск тестов с помощью Resharper и т.д.).

  • Проект Silverlight NUnit Project VS. Проверьте этот пост в блоге, чтобы узнать, как использовать этот шаблон в своем проекте. Также проверьте скринкаст Toran Billups, который появился в этой теме. Имейте в виду, что у вас могут возникнуть проблемы с использованием Silverlight NUnit Project с некоторыми другими фреймворками или программами, такими как Moq или Resharper.

Ответ 6

Я только что сделал 16 мин скринкаст по этой теме. Я покажу, как начать работу с NUnit и resharper на WP7. Я также показываю несколько проблем, с которыми я столкнулся (ничто не связанное с CI).

http://toranbillups.com/blog/archive/2011/07/24/Test-Driving-My-Windows-Phone-7-App