C #: Мокинг и тестирование защищенных (или частных) методов в запечатанных классах - подходы

У меня есть запечатанный класс с защищенными методами, поведение которых я хочу протестировать. Это затрудняет непосредственное тестирование и затрудняет имитацию.

Это кодовая база, которая не была разработана в стиле TDD, и сейчас я добавляю модульные тесты для конкретных функций.

Какие общие подходы возможны в этом случае? На данный момент у меня есть:

  1. Распечатать класс. Затем создайте прокси или адаптер, производный от класса в нашем тестовом коде, для туннелирования доступа к защищенному методу.
  2. Вынесите поведение в защищенном методе за пределы делегата / функтора и повторно внедрите его. Затем независимо проверьте факторизованное поведение.
  3. Проверьте, вызвав ближайший общедоступный метод в иерархии наследования, который использует защищенный метод. Потенциально приводит к множеству насмешек и подверженности риску, когда код, отличный от тестируемого, изменяется - создавая хрупкие тесты.
  4. Используйте отражение, чтобы получить доступ к защищенному методу. Затем вызовите его напрямую.

Есть ли еще?

5
задан Tim Barrass 20 January 2011 в 14:30
поделиться