Как получить покрытие кода при тестировании 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, поэтому в "бизнес-смысле" она выглядела бы не так хорошо:) Но как насчет просто тестирования, работает ли это.