С PHPUnit и PHP >= 5.3 можно проверить защищенные методы. Следующая страница в stackoverflow описывает наилучшую практику:
"Рекомендации по проверке защищенных методов с помощью PHPUnit"
protected static function callProtectedMethod($name, $classname, $params) {
$class = new ReflectionClass($classname);
$method = $class->getMethod($name);
$method->setAccessible(true);
$obj = new $classname($params);
return $method->invokeArgs($obj, $params);
}
Для тестирования общедоступных методов в абстрактных классах легко использовать PHPUnit. Протестировать защищенные методы на обычных классах легко с помощью вышеприведенного подхода. Для тестирования защищенных методов на абстрактных классах должно быть возможно как-то...
Я знаю, что PHPUnit выводит абстрактные классы и реализует абстрактные методы в конкретном классе и запускает тесты против этого конкретного класса, но я не знаю, как интегрировать это в описанный выше подход, чтобы иметь callProtectedMethodOnAbstractClasses().
Как вы проводите такие тесты?
PS: Вопрос не в истинности тестирования защищенных методов (см.: white-, gray- and blackbox-testing). Необходимость тестирования защищенных методов зависит от вашей стратегии тестирования.