Доброго времени суток!
Не могу понять 1 момент в тестировании - protected и private методы.
Про их тестирование пишут примерно так
Вообще говоря, тестировать закрытые и защищенные методы - плохая идея. Они не являются частью открытого интерфейса и обычно выполняются через открытые методы класса. Поэтому, когда мы тестируем открытые методы, они неявно тестируют закрытые и защищенные методы.
То есть либо у вас плохая реализация класса, либо тестируйте совместно с публичным.
Но, если у меня публичный метод использует пару методов закрытых, которые формируют, например, различные массивы данных. И нет смысла их светить наружу. Чтобы протестировать оба метода мне нужно формировать огромный тест только для успешного варианта. А так я бы мог протестировать эти методы отдельно и быть уверенными в них. А в публичном методе просто мокировать. Это в разы уменьшает сложность написания и понимания теста.
В стандартной реализации я не нашел варианта для такого тестирования. Есть на stackoverflow
protected static function getMethod($name) {
$class = new ReflectionClass('MyClass');
$method = $class->getMethod($name);
$method->setAccessible(true);
return $method;
}
public function testFoo() {
$foo = self::getMethod('foo');
$obj = new MyClass();
$foo->invokeArgs($obj, array(...));
...
}
На мой взгляд это костыль
Можете пояснить почему не внедрят это в стандартный функционал. Либо как мне правильно писать классы и тесты для таких вариантов?