Как получить покрытие кода при тестировании Silverlight

Я ищу решение для покрытия кода, которое работает с silverligt. Он также должен работать с msbuild, потому что мы запускаем все остальные модульные тесты автоматически на сервере сборки.

Интеграция с Visual Studio и/или resharper является плюсом, и я ничего не имею против простой настройки или указателя на учебник. Обычно я не изменяю файлы сборки, и, к сожалению, у меня нет времени изучать msbuild на данный момент.

Ответы

Ответ 1

К сожалению, из-за прозрачной модели безопасности (т.е. все приложения изолированы) в среде выполнения Silverlight это непростая задача. Традиционная инструментария покрытия кода .NET модифицирует базовую сборку, вставляя вызовы P/Invoke в инструменты сбора охвата.

В результате такие инструменты, как инструмент инструментария покрытия кода Visual Studio 2008, не работают с Silverlight.

Чтобы добиться этого в Silverlight, вам нужно будет разработать специальную инструментальную программу, а также способ сбора и отправки данных.

В команде Silverlight мы разработали частичное решение, которое может сделать это для некоторых людей, но оно не готово к выпуску. Ищите его когда-нибудь в Silverlight Toolkit, возможно.

Извините, что я не знаю ответа для вас сегодня.

Ответ 2

Следуйте следующей процедуре и получите результаты охвата кода;

-Добавить новый тестовый проект к решению
-Удалить все существующие классы (тест базы данных, заказное тестирование и т.д.), Чтобы вы остались только с классом unit test (UnitTest1).
-Удалить все бесполезные комментарии и crud-код из тестового класса, чтобы у вас остался только тестовый метод (без комментариев, даже TestContext)
-Добавить ссылку на версии Silverlight "System.dll", "System.Windows.dll" в тестовый проект. (обычно находится в разделе "C:\Program Files\Microsoft SDKs\Silverlight\v2.0\Reference Assemblies \" (удалите существующую ссылку на system.dll, если вам нужно сначала)
-Добавить ссылку на тестируемый проект
-Вы можете теперь писать тесты против объектной модели (стандартные классы)

Приветствия,

Ссылка: http://weblogs.asp.net/rosherove/archive/2008/12/27/unit-testing-in-silverlight-land-with-typemock-isolator.aspx

Ответ 3

Ответ на этот момент - Нет (если Джефф Уилкокс говорит "нет", это нет;-)).

Я попросил NCover поддержать этот вопрос некоторое время назад (о своем FAQ re Silverlight):

... Я использую Silverlight 2.0 и AFAIK, он может работать только в браузере. Так вы говорите о SL3 или я что-то пропустил?

Я считаю, что SL3 скоро будет RTMed. Если я обновляюсь, сможет ли мое приложение автоматически выйти из браузера (и, следовательно, использовать NCover), или мне нужно будет его изменить?

И это ответ, который я получил:

Часто задаваемые вопросы являются точными, так как формулировка делает это несколько запутанным. В разделе вопросов часто задается вопрос: NCover не поддерживает покрытие кода Silverlight (v1 или v2 или v3) при использовании аргумента //iis, потому что тогда он запускается на собственной CLR.

Однако классы кода и поддержки приложений Silverlight (v1 или v2 или v3) являются допустимыми С#/VB, поэтому вы можете писать модульные тесты с этой частью приложения и запускать эти тесты с помощью NUnit/MSTest/Gallio/xUnit/etc, и вы получите покрытие этой части.

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

Я понял, что на самом деле приложения Silverlight не поддерживаются - вам нужно "Создать стандартную библиотеку .NET и файлы ссылок в нее, чтобы получить данные о покрытии".

Ответ 4

Чтобы прояснить предыдущие сообщения, NCover может распространять только .NET-процесс. Он еще не справляется с CLR Silverlight. В приведенных выше случаях один пользователь спросил о платформе .NET test, которая устраняет его тесты .NET, которые работают против его приложения Silverlight. В этом сценарии будет рассмотрен любой .NET(например, тестовая среда). Код Silverlight НЕ будет покрыт.

Ответ 5

В соответствии с FAQ NCover он может охватывать Silverlight:

[http://docs.ncover.com/ref/3-0/frequently-asked-questions/#q05][1]

До сих пор я не нашел никакой информации о том, работает ли это, например. для библиотек классов silverlight. Странно, что если ncover работает, нет информации (сообщения в блоге и т.д.) Об этом. Все ли используют "Создавать стандартную библиотеку .NET и файлы ссылок в ней для получения данных о покрытиях" при тестировании кода Silverlight?

Когда дело доходит до других решений (даже коммерческих), мой googling не дал никаких результатов.

Ответ 6

Я попросил об этом у поддержки NCover.

Мой вопрос:

Предположим, что я создаю класс silverlight библиотека (Проект → Новый проект...) из Visual Studio. В этом классе библиотека У меня есть несколько классов, и я используйте шаблон Silverlight NUnit для проект, который содержит модульные тесты для моя библиотека классов silverlight:

http://weblogs.asp.net/nunitaddin/archive/2008/05/01/silverlight-nunit-projects.aspx

Я могу просто запускать модульные тесты (даже на сервере сборки мы используя msbuild и TFS), но я не могу получить данные о покрытии кода для них, используя стандартные варианты покрытия кода которые доступны в Visual Studio.

Может ли NCover показывать покрытие кода для мои библиотеки классов silverlight?

Ответ:

Пока вы тестируете библиотеки классов с помощью NUnit, вы должны уметь они используют NCover. Если вы проверите их через веб-браузер с помощью инструмента, такого как Selenium, то вы не сможете получить покрытие.

Теперь мне интересно, пытался ли кто-нибудь из команды silverlight использовать NCover + NUnit? Конечно, MS имеет свою собственную инфраструктуру unit test, поэтому в "бизнес-смысле" она выглядела бы не так хорошо:) Но как насчет просто тестирования, работает ли это.