Ответ 1
Разработчики Microsoft действительно любят ключевые слова sealed
и static
(а также internal
), и они ненавидят virtual
. Из-за этого стандартные подходы к тестированию и фреймворки часто не работают. У вас есть два варианта:
- Обменивать доступ к
OperationContext
в пользовательском классе и вставлять экземпляр класса в вашу службу. Это потребует дополнительной работы, потому что вам нужно будет делать инъекции где-то вне вашей службы. Например, для впрыска конструктора потребуется пользовательскийIInstanceProvider
. - Используйте более мощные рамки тестирования. Проверьте Moles framework, который способен перехватывать вызовы и перенаправлять их. Это позволяет "издеваться" о закрытых классах и статических методах/свойствах.
Другой подход - это просто рефакторинг вашего кода. Отключите всю бизнес-логику от вашего сервиса в отдельный тестируемый бизнес-класс и позвольте службе участвовать только в интеграционном тесте. Сервис больше похож на инфраструктуру, и не все действительно нуждается в unit test. Интеграция/сквозной/поведенческий тест также является пробным и действительным подходом.