Найти тему

Как создать мок-класс (тестовый двойник) для final class в PhpUnit

Если коротко никак! Но, используя библиотеку PhpMocker - очень даже легко)) Причина возникновения проблем с созданием тестовых двойников финальных классов в PhpUnit связана с тем, что все мок-классы созданные им, создаются с помощью наследования.

А как известно, создать наследника для финального класса просто невозможно, вот поэтому PhpUnit и терпит фиаско.

PhpMocker может создавать мок-классы как с помощью наследования, так и с помощью изменения PHP кода в момент загрузки класса. И Именно благодаря этому для него нет проблем в создании тестовых двойников для финальных классов (а значит и для перечислений)

Дзен плохо подходит для публикации кусочков кода, так что код лучше посмотреть в примере на гитхабе: https://github.com/dracul-aid/PhpMocker/blob/master/documentation-ru/faq/final-class.md

PhpMocker - независимая библиотека, она не привязана ни к какому фреймворку юнит тестирования. А это значит, что проводя любые юнит-тесты вы сможете спокойно тестировать финальные классы!

Кстати, PhpMocker может также работать с private, static и final методами, поддерживает аргументы функций по ссылке, а кроме того, может исполнить вообще любой код (пользовательскую функцию) внутри мок-метода