Обычное решение для тестирования приватных методов - извлечь их в новый класс и делегировать. Это то, что предложил Тормод, но вы отметили, что это не имеет никакого смысла для вас.
То, что вы также можете сделать, - это сделать метод общедоступным, но ретранслировать какое-то соглашение об именах для обозначения его конфиденциальности: например, privateGetNumberOfPages()
или _getNumberOfPages()
. Это будет моральная инкапсуляция : это не помешает кому-либо ссылаться на метод, но никто не может сказать, что он не знал, что он был закрытым.
Таким образом, вы можете вызвать метод в своем модульном тесте, но документально (не принудительно) это частный метод. Это хорошо работает в некоторых командах, но не во всех.
Другая возможность, хотя и не самая лучшая в плане дизайна, состоит в том, чтобы сделать метод защищенным и иметь класс тестового набора, наследуемый от тестируемого класса, чтобы тест мог вызывать метод и принудительно инкапсулироваться. Я не уверен, что это возможно в PHP.