У меня есть закрытый класс с защищенными методами, поведение которых я хочу проверить. Это затрудняет прямое тестирование, и трудно издеваться.C#: Стыковка и тестирование защищенных (или закрытых) методов в закрытых классах - подходы
Это код, который не был разработан в TDD, и теперь я добавляю модульные тесты для определенной функциональности.
Каковы общие подходы в этом случае? На данный момент у меня есть:
- Имейте класс незапечатанным. Затем создайте прокси или адаптер, полученные из класса в нашем тестовом коде, чтобы туннелировать доступ к защищенному методу.
- Оцените поведение в защищенном методе делегата/функтора и заново вставьте его. Затем проверьте поведение, основанное на фактах, независимо.
- Тестирование путем вызова ближайшего общедоступного метода в иерархии наследования, использующего защищенный метод. Потенциально приводит к большому количеству насмешек и подверженности риску, когда код отличается от кода, находящегося под контролем теста, - создание хрупких тестов.
- Используйте отражение, чтобы получить доступ к защищенному методу. Затем позвоните прямо.
Есть ли еще?
несколько раз, чтобы протестировать общедоступный метод, удобно издеваться над личным методом. Я думаю, что это основной случай использования – anthares
@anthares: Это звучит ошибочно. Если метод 'private' является частью реализации метода' public', его не следует издеваться. – jason
Ну, давайте приведу вам пример: мне просто нужен хороший полудневный день, чтобы даже приблизиться к издевательствам всего, что мне нужно, просто называть определенный защищенный метод напрямую, используя отражение. Если мне нужно высмеять все из ближайшего публичного метода, мне, возможно, придется передать задачу моим детям для завершения. Это не значит, что я не согласен с вами в целом - просто с некоторыми кодовыми базами существуют и другие практические ограничения. (и +1) –