Как правильно настроить модульные тесты C #для подключаемых модулей CRM 2011?

Попытка отладки плагина в CRM 2011 может быть чрезвычайно сложной. Проблемы возникают не только с наличием файлов.pdb в правильном месте на сервере, но и каждый раз, когда вы вносите изменения в код, вам приходится проходить через -хлопоты с развертыванием и повторной регистрацией подключаемого модуля. Поскольку триггер находится в самой CRM, создать для него модульный тест сложно.

Мой текущий процесс написания модульного теста для совершенно нового плагина довольно медленный и ошибочный, но выглядит примерно так:

  1. Зарегистрируйте новый подключаемый модуль с помощью инструмента регистрации подключаемых модулей SDK
  2. . Прикрепите отладчик к w3wp.exe, поставив точку останова в коде плагина.
  3. Запустите плагин с помощью любого действия, для которого он зарегистрирован.
  4. Когда сработает точка останова, сериализуйте прообраз, постобраз и целевые значения конвейера в XML-файлы, это станет входными данными для моего модульного теста.
  5. Прекратите отладку и создайте новый модульный тест, используя RhinoMocks для имитации PluginExecutionContext и ServiceProvider, используя загрузку сериализованных XML-файлов в качестве заглушек для входных параметров.
  6. Создайте методы, запускаемые в начале и в конце каждого модульного теста, которые сбрасывают (сначала при попытке удаления, затем добавляют )фиктивные данные для обработки модульным тестом, а затем удаляют фиктивные данные в конце теста.
  7. Отредактируйте сериализованные файлы, чтобы они ссылались на фиктивные данные, чтобы я мог гарантировать, что плагин будет работать с одними и теми же данными при каждом запуске.
  8. Объявите и создайте экземпляр плагина в модульном тесте, передав фиктивные объекты
  9. Запустите плагин, выполнив дополнительные запросы, чтобы убедиться, что плагин выполнил работу, которую я ожидал,Утверждение о неудаче.

Это больно делать. От получения правильных изображений до создания фиктивных данных и сброса их каждый раз при запуске теста, кажется, есть много областей для улучшения.

Как я могу выполнить модульное тестирование плагина без необходимости его фактического запуска из CRM или прохождения всей шумихи по его отладке в CRM и создании уникальных фиктивных данных для каждого теста? Как я могу использовать внедрение, чтобы избавиться от необходимости удалять, создавать, тестировать, проверять и удалять данные в CRM для каждого модульного теста?

Обновление 2016

Этот вопрос до сих пор вызывает довольно много вопросов, поэтому я решил добавить два (, которые я знаю о )проектах с открытым исходным кодом, которые предоставляют поддельные экземпляры CRM для модульного тестирования:

  • FakeXrmEasy--Создано Jordi (см. ответ ниже)
    • В первую очередь поддельная служба CRM
    • Поддержка подделки плагинов/рабочих процессов
    • Зависимость от FakeItEasy
    • Большая документация
  • XrmUnitTest--Создано мной
    • Поддельная служба CRM и многое другое (Предположения, построители сущностей и т. д.)
    • Свободная поддержка подделки плагинов/рабочих процессов
    • Нет зависимости от какой-либо фиктивной среды
    • Отстойная документация (Я работаю над этим)

Посмотрите это видео , которое я создал, чтобы сравнить и сопоставить различия.

8
задан Daryl 22 April 2016 в 00:08
поделиться