2016-07-14 16 views
1

Мы хотели бы выполнить модульное тестирование некоторых серверных компонентов, выполняющих именованные запросы, эти конструкторы компонентов получают EntityManager.Получить «IsClient = false» EntityManager для модульного тестирования

Наш модульный модуль тестирования основан на NUnit, и мы проводим тесты в нераспределенном режиме для имитации развертывания с двумя уровнями. К сожалению, создание EntityManager из единичного тестового кода всегда будет создавать диспетчер «Клиент», тогда как нам понадобится версия «Server» (то есть такая же, как та, что вы получите в методе сервера). Когда мы получаем клиентскую версию, некоторые именованные запросы внутри кода, который мы тестируем, отклоняются из-за ограничений безопасности для модели.

Есть ли хороший способ получить EntityManager и каким-то образом имитировать поведение сервера на стороне тестирования? Лучшее, что я сделал до сих пор, - это вызов специализированного метода сервера, где-то в глобальной переменной храните EntityServer и используйте это из модульных тестов.

С уважением

ответ

2

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

Компоненты на стороне сервера DevForce, такие как IEntityLoginManager, EntityServerQueryInterceptors и т. Д., Всегда будут вызываться (если они найдены) независимо от фактического развертывания. Таким образом, даже при выполнении двухуровневых модульных тестов DF будет запускать EntityServer в памяти и искать серверные компоненты для выполнения запроса от EntityManager.

Если вы столкнулись с проблемами при проверке авторизации ClientCanQuery, это означает, что авторизационная авторизация EntityServerQueryInterceptor запускается. Вы можете реализовать пользовательский перехватчик для целей тестирования, используя функцию «контекста компоновки» DevForce. С помощью специального тестового перехватчика вы можете переопределить логику авторизации по умолчанию, чтобы эти запросы могли выполняться. Есть некоторая информация об использовании контекстов композиции с тестированием here.

В качестве альтернативы, если вы хотите растянуть значение теста «unit», и поскольку серверные компоненты будут вызываться независимо, вы можете написать простые тесты на стороне клиента, которые запускают определенную логику на стороне сервера, которую вы ищете контрольная работа. Например, простой именованный запрос, вызываемый на клиенте, вызовет определенную логику в вашем именованном поставщике запросов и/или перехватчике запросов, и тест может проверить результаты.

 Смежные вопросы

  • Нет связанных вопросов^_^