Модульное тестирование с Moq, Silverlight и NUnit - PullRequest
10 голосов
/ 13 апреля 2009

Я пытаюсь провести модульное тестирование проекта Silverlight 3. Я использую:

Когда я пишу тест, в котором не используется Moq , он работает как следует.

Когда я использую Moq вне теста, Moq работает как надо. (Я смоделировал интерфейс и сделал проверку в обработчике кнопок в качестве доказательства.)

Но когда я запускаю модульный тест, использующий Moq, я всегда получаю это:

System.IO.FileNotFoundException: Could not load file or assembly 'System, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. The system cannot find the file specified.
at Moq.ExpressionExtensions.ToStringFixVisitor..ctor(Expression expression)
at Moq.Interceptor.AddCall(IProxyCall call, SetupKind kind) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Interceptor.cs: line 104
at Moq.Mock.<>c__DisplayClassc`2.<Setup>b__b() in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Mock.cs: line 387
at Moq.PexProtector.Invoke<T>(Func`1 function) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\PexProtector.cs: line 17
at Moq.Mock.Setup<T1,TResult>(Mock mock, Expression`1 expression) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Mock.cs: line 371
at Moq.Mock`1.Setup<TResult>(Expression`1 expression) in c:\Build\Moq Drop\moq\WorkingDirectory\trunk\Source\Mock.Generic.cs: line 194
at SilverlightMoq.Test1.TestFirst() in Test1.cs: line 23 

Как это можно исправить?


Я перестроил обе сборки для SL 3 с одинаковыми результатами.

Мне удалось запустить тест на платформе модульного тестирования Microsoft Silverlight.

http://code.msdn.microsoft.com/silverlightut/

Это среда тестирования в браузере, которая кажется стандартным способом модульного тестирования SL. Проблемы:

  1. вы должны запустить все свои тесты одновременно
  2. это ужасно медленно.

    (примерно в 5 раз медленнее, чем те же тесты, выполняемые в тестовой среде nunit)

Кто-нибудь знает какие-либо другие тестовые среды SL или лучший способ запустить тесты на этой платформе?

Когда я пытаюсь использовать плагин TestDriven.Net vs, я получаю сообщение об ошибке:

System.IO.FileNotFoundException: не удалось загрузить файл или сборку 'System, ...

Ответы [ 5 ]

9 голосов
/ 22 июля 2010

Благодаря информации, предоставленной Ли, и предоставленной им ссылке (http://weblogs.asp.net/nunitaddin/archive/2008/05/01/silverlight-nunit-projects.aspx) Я смог получить свои тесты Silverlight NUnit , работающие в Hudson с покрытием кода! Классные вещи, эй! И они также работают с ReSharper , поэтому я не чувствую, что меня больше наказывают (с 20-секундной задержкой) за выполнение TDD в Silverlight.

Итак, что я сделал точно?

  • Я создал проект Framework Unit Silver Test для SL3:

    (http://www.jeff.wilcox.name/2010/05/sl3-utf-bits/)

  • Затем я изменил ссылки на все сборки Silverlight тестового проекта (кроме mscorlib) на «Копировать локально: True», как подробно описано в:

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

  • Затем я добавил ссылки на платформу Silverlight NUnit 2.5.1, представленную в следующем блоге (есть другие версии, предоставленные Джеффом Уилкоксом в блоге, о котором я упоминаю ниже, и Джейми Кансдейл в его блоге выше, но это было последняя найденная версия):

    (http://wesmcclure.tumblr.com/post/152727000)

  • Вот и все! После этого я мог писать свои тесты, запускать их в ReSharper и в тестере NUnit! Плюс я мог бы использовать ncover для получения отчетов о покрытии !!!

  • РЕДАКТИРОВАТЬ: Да, и если вы запустите какие-либо тесты, требующие потока пользовательского интерфейса, вы получите ошибку перекрестного потока в ReSharper. Это решается путем выполнения этих тестов в рамках Deployment.Current.Dispatcher.BeginInvoke(...) вызова.

  • После использования юнитов для моих тестов я не смог запустить их из веб-интерфейса SL Test Framework, но это не было для меня проблемой. Если вам нужно, чтобы это сработало, взгляните на:

    (http://www.jeff.wilcox.name/2009/01/nunit-and-silverlight/)

  • PS: Я также создал проект NUnit для запуска консоли NUnit для запуска моих тестов с консоли NUnit (не пытайтесь включать ваши сборки без SL в тот же проект NUnit, он не будет работать, потому что он использует другая библиотека nunit.framework).

Я также пытался использовать StatLight (http://statlight.codeplex.com/) для запуска тестов с консоли, и это хорошо для меня, но я фанат ReSharper и NUnit, так что это был не лучший вариант для меня. была также странная ошибка со StatLight, когда он не загружал ресурсы моего тестового проекта должным образом, что приводило к некоторым ошибкам теста.

Надеюсь, это кому-нибудь поможет. Я не придумал здесь ничего нового, а просто собрал всю информацию, которую я хотел бы, чтобы кто-то подытожил для меня. Когда у меня будет время, я буду вести блог об этом с точки зрения создания фреймворка Habanero (http://www.habanerolabs.com) проекта с SilverLight.

Уф. Вот и все, ребята!

5 голосов
/ 13 апреля 2009

Ответом на данный момент является проект проекта Nunit от Silverlight Jamie Cansdale:

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

Этот шаблон фантастический и именно то, что я искал. Это работает и с Resharper! Надеюсь, это сэкономит кому-то еще несколько часов.

4 голосов
/ 13 апреля 2009

Я создал инструмент для непрерывной интеграции и ускорения общего Silverlight TDD ...

http://www.StatLight.net

Теперь он полностью поддерживает любую версию NUnit, скомпилированную для работы в Silverlight.

1 голос
/ 29 апреля 2009

Для меня сработало то, что свойство «Копировать локально» (в сетке свойств IDE (F4) эталонной системы) установлено в значение true.

0 голосов
/ 13 апреля 2009

Похоже на выпуск Silverlight 3. Можете ли вы получить источники Moq.Silverlight и NUnitSilverlight и создать их на двоичных файлах silverlight 3? Кажется, они построены с SL 2.

...