Состояние модульного тестирования для Windows Phone - PullRequest
19 голосов
/ 13 мая 2011

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

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

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

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

  • Порты с открытым исходным кодом проектов, которые являются либо незавершенными, либо заброшены
  • Проекты, которые доступны только в виде вложений в чей-то блог

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

Ответы [ 6 ]

14 голосов
/ 16 мая 2011

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

Модульное тестирование

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

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

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

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

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

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

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

ОБНОВЛЕНИЕ Модульное тестирование приложений Windows Phone 8 будет официально поддерживаться в Visual Studio 2012 Update 2 , включая интеграцию VS и поддержку командной строки.Эти тесты выполняются в эмуляторе, поэтому я включил его в раздел «Интеграционные тесты».

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

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

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

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

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

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

3 голосов
/ 13 мая 2011

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

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

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

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

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

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

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

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

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

2 голосов
/ 12 февраля 2013

Обновление: официально поддерживается модульное тестирование для Windows Phone 8.

http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/31/windows-phone-unit-tests-in-visual-studio-2012-update-2.aspx

2 голосов
/ 13 мая 2011

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

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

1 голос
/ 15 января 2012

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

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

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

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

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

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

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

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

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

...