Интеграция модульного тестирования Silverlight в VS 2010? - PullRequest
7 голосов
/ 22 ноября 2010

В настоящее время я использую Silverlight Unit Test Framework, но я бы предпочел запускать тесты непосредственно в VS2010.Мне любопытно узнать, какие подходы и инструменты используют все остальные.

Я использую Silverlight 4 с Prism и шаблон MVVM, и меня особенно интересует поддержка интегрированных модульных тестов Silverlight в VS 2010, которую яможно использовать с моими модульными тестами ViewModel.Я использую внедрение зависимостей в Unity, и я пишу модульные тесты, высмеивая вызовы в моем слое WCF, используя Moq для Silverlight.В данный момент я даже не смотрю интеграционные тесты, но даже в простом модульном тесте, который тестирует одну команду ViewModel, запрос на обслуживание для моего имитированного уровня обслуживания может занять около 50 миллисекунд.Поэтому поддержка асинхронных тестов важна для меня.

Проблема, которую я поднимаю здесь, не связана с тестированием View, которое я с некоторым успехом решал в прошлом, используя System.Windows.Automation.Peers и- хотя я еще не использовал его - возможно, теперь можно было бы легче справиться с поддержкой VS 2010 Feature Pack 2 (которая, кажется, нацелена на автоматизацию / воспроизведение тестов пользовательского интерфейса из того, что я собираю).

Iследует упомянуть, что мои выводы по продуктам, на которые я смотрел и которые использовали до сих пор, таковы:

  • Silverlight Unit Test Framework - в настоящее время я использую это, и это здорово, насколько это возможно, ноего ограничения: (а) он не интегрирован с Visual Studio;и (b) если вы не хотите запускать все тесты, вы ограничены фильтром грубых выражений тегов.
  • StatLight - очень приятно.В настоящее время я использую это, и я использовал его с v0.9 при нацеливании на Silverlight 3 в предыдущем проекте.Будучи инструментом командной строки, он может быть интегрирован с сервером непрерывной интеграции, который, безусловно, обрабатывает другой необходимый сценарий.Но он бесполезен напрямую с точки зрения интеграции Visual Studio в процессе разработки.
  • Просмотр результатов модульного теста для Silverlight (расширение Visual Studio в галерее Visual Studio) - выглядит многообещающе, но его ограничения () в настоящее время не удается найти проекты, которые находятся в папках решения, а не в корневом каталоге решения;и (b) запускает все тесты в данной сборке (через StatLight), без явной возможности выполнить определенный тест или выбор тестов.
  • Einar Ingebrigtsen Silverlight Unit Test Runnerдля ReSharper, который впоследствии стал Odin - впереди игры (он впервые появился в 2008 году), но есть ограничение: кажется, что этот проект больше не поддерживается (последнее обновление - апрель 2009 года).
  • AgUnitПлагин ReSharper (http://agunit.codeplex.com/) - выглядит отлично изначально.После загрузки исходного кода для него и создания последней (исправленной ошибки) версии для работы с ReSharper 5.1 я очень обрадовался.Но, к сожалению, он не обрабатывает асинхронные тесты.Это ограничение дизайна для многопоточности, поэтому не имеет значения, пытаетесь ли вы использовать асинхронную поддержку, встроенную в базовый тестовый модуль Silverlight (Microsoft.Silverliht.Testing.SilverlightTest), или используете ли вы AutoResetEvent иличто-нибудь еще.Это было отмечено координатором на дискуссионном форуме проекта на CodePlex.Это серьезное ограничение.
  • TestDriven.NET 3.0 - кажется, на первый взгляд имеет поддержку тестов Silverlight 4.0, но ограничение (я подозреваю) заключается в "переносимости сборок" Silverlight 4 (т.е. 5 зависимых сборок, которыепереносимы между SL4 и .NET 4).Конечно, когда я попытался использовать его с простым POC, он разбил мой экземпляр VS 2010.

Возможно, я что-то упустил здесь - интересно, есть ли у кого-то в сообществе лучшие идеи для Silverlightмодульное тестирование?

Ответы [ 5 ]

2 голосов
/ 17 января 2011

Я являюсь автором плагина AgUnit.

AgUnit блокирует асинхронное модульное тестирование, чтобы ускорить тестовый запуск.Под крышками используется тот же код, что и в модуле тестирования Silverlight Unit Test Framework, но он очень медленный, если вам приходится обрабатывать большое количество тестов.Я видел различия между почти полчаса и несколькими минутами для нескольких тысяч тестов.

Тем не менее, если вы хотите асинхронное тестирование, это очень изолированная часть AgUnit, которая делает это.Я постараюсь создать сборку с отключенным.В будущем это будет опция конфигурации или атрибут, я еще не решил.

Не стесняйтесь обращаться ко мне с любыми вопросами или запросами.

2 голосов
/ 26 ноября 2010

ОБНОВЛЕНИЕ:

Я уже остановился на использовании StatLight для своего сервера непрерывной интеграции, но я искал решение, позволяющее мне запускать асинхронные модульные тесты Silverlight непосредственно в VS2010 во время разработки.

Вдохновленный предложением Роба Фонсека-Энсора использовать Rx (см. Его отдельный ответ на этой странице), я еще раз взглянул на проблему.Это привело меня к поиску не-Rx решения проблемы использования AgUnit для запуска асинхронных модульных тестов Silverlight.

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

  • Платформа модульного тестирования Silverlight
  • ReSharper 5.1
  • Плагин AgUnit ReSharper
  • [Образец асинхронной модели]

Мои модели просмотра имеютсделанные на их основе классы обслуживания, которые предоставляют абстракции моих (автоматически сгенерированных) справочных классов услуг WCF.Чтобы обеспечить доступ к методам службы WCF, мои классы обслуживания на заказ также полагаются на другой общий класс, который обертывает асинхронный шаблон.Для своих модульных тестов я уже издевался над моими справочными классами службы WCF и моими классами обслуживания на заказ с помощью Moq - но я не смотрел на насмешку над моим классом-оболочкой асинхронного шаблона.

Поэтому я решил смоделировать свой асинхронный шаблонкласс обертки также.Привлекательность этого заключалась в том, что я думал, что я мог бы тогда быть в состоянии использовать Rx с фиктивным IScheduler (как Роб предложил в своем ответе) во всех моих издевательствах, оставляя мои настоящие классы свободными от любых ссылок наRx (что является обязательным требованием, потому что для этого проекта в том месте, где я работаю, мне нужно исключить Rx из любого кода, который развертывается в производственной среде).Однако, как только я высмеял класс-обертку, я понял, что мне даже не нужен Rx, и что существует еще более простое решение, которое я действительно должен был рассмотреть раньше.Это довольно тривиально - все, что мне действительно нужно было сделать, - это смоделировать класс-оболочку и убедиться, что он вызывает Invoke для операций обратного вызова, а не вызывать BeginInvoke.Это в конечном итоге предотвращает попадание обратных вызовов, которые прекрасно работают при работе с модулем модульного тестирования Silverlight в сеансе браузера, когда модульные тесты запускаются AgUnit в VS2010.(Разрешение обратным вызовам перейти в черную дыру при использовании AgUnit, конечно, помешало бы правильному завершению отдельных тестов и могло привести к тайм-аутам или, что еще хуже, к ложным срабатываниям в результатах тестов.)

В отсутствие более качественных советов по любым последующим ответам на этот вопрос мне представляется, что это самый простой способ справиться с этим сценарием - позволить моим асинхронным модульным тестам запускаться в AgUnit, не требуя Rx в моем производственном коде.

Для тех, кто не сталкивается с наложенными компанией ограничениями на развертывание кода, использующего Rx (который по-прежнему является проектом DevLabs), я думаю, что решение Роба определенно стоит посмотреть.

2 голосов
/ 22 ноября 2010

Я использую тестовый фреймворк Silverlight Unit, AgUnit и RX с фиктивным провайдером IScheduler, чтобы мои модульные тесты были однопоточными:)

0 голосов
/ 26 ноября 2010

Я обычно создаю обычный проект модульного теста в VS.NET, добавляю свою сборку Silverlight в ссылках и пишу классы модульного теста.

Так что все работает из коробки. В чем проблема с этим решением?

0 голосов
/ 22 ноября 2010

Читали ли вы о недавно выпущенном Visual Studio 2010 Feature Pack 2 .В настоящее время он доступен только подписчикам MSDN и работает только с определенными выпусками VS2010 (Premium, Ultimate и Test Pro).

Вот краткий обзор: http://blogs.msdn.com/b/amit_chatterjee/archive/2010/11/16/visual-studio-2010-feature-pack-2-released-new-set-of-testing-capabilities.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...