Попытка отладки плагина в CRM 2011 может быть чрезвычайно сложной. Проблемы возникают не только с наличием файлов.pdb в правильном месте на сервере, но и каждый раз, когда вы вносите изменения в код, вам приходится проходить через -хлопоты с развертыванием и повторной регистрацией подключаемого модуля. Поскольку триггер находится в самой CRM, создать для него модульный тест сложно.
Мой текущий процесс написания модульного теста для совершенно нового плагина довольно медленный и ошибочный, но выглядит примерно так:
- Зарегистрируйте новый подключаемый модуль с помощью инструмента регистрации подключаемых модулей SDK
- . Прикрепите отладчик к w3wp.exe, поставив точку останова в коде плагина.
- Запустите плагин с помощью любого действия, для которого он зарегистрирован.
- Когда сработает точка останова, сериализуйте прообраз, постобраз и целевые значения конвейера в XML-файлы, это станет входными данными для моего модульного теста.
- Прекратите отладку и создайте новый модульный тест, используя RhinoMocks для имитации PluginExecutionContext и ServiceProvider, используя загрузку сериализованных XML-файлов в качестве заглушек для входных параметров.
- Создайте методы, запускаемые в начале и в конце каждого модульного теста, которые сбрасывают (сначала при попытке удаления, затем добавляют )фиктивные данные для обработки модульным тестом, а затем удаляют фиктивные данные в конце теста.
- Отредактируйте сериализованные файлы, чтобы они ссылались на фиктивные данные, чтобы я мог гарантировать, что плагин будет работать с одними и теми же данными при каждом запуске.
- Объявите и создайте экземпляр плагина в модульном тесте, передав фиктивные объекты
- Запустите плагин, выполнив дополнительные запросы, чтобы убедиться, что плагин выполнил работу, которую я ожидал,Утверждение о неудаче.
Это больно делать. От получения правильных изображений до создания фиктивных данных и сброса их каждый раз при запуске теста, кажется, есть много областей для улучшения.
Как я могу выполнить модульное тестирование плагина без необходимости его фактического запуска из CRM или прохождения всей шумихи по его отладке в CRM и создании уникальных фиктивных данных для каждого теста? Как я могу использовать внедрение, чтобы избавиться от необходимости удалять, создавать, тестировать, проверять и удалять данные в CRM для каждого модульного теста?
Обновление 2016
Этот вопрос до сих пор вызывает довольно много вопросов, поэтому я решил добавить два (, которые я знаю о )проектах с открытым исходным кодом, которые предоставляют поддельные экземпляры CRM для модульного тестирования:
- FakeXrmEasy--Создано Jordi (см. ответ ниже)
- В первую очередь поддельная служба CRM
- Поддержка подделки плагинов/рабочих процессов
- Зависимость от FakeItEasy
- Большая документация
- XrmUnitTest--Создано мной
- Поддельная служба CRM и многое другое (Предположения, построители сущностей и т. д.)
- Свободная поддержка подделки плагинов/рабочих процессов
- Нет зависимости от какой-либо фиктивной среды
- Отстойная документация (Я работаю над этим)
Посмотрите это видео , которое я создал, чтобы сравнить и сопоставить различия.
задан Daryl 22 April 2016 в 00:08
поделиться