We also have problems in our unit tests with the now final classes which can’t be mocked any more. In my view, there should be at least interfaces if it is absolutely necessary to declare the classes final: Copying the declaration of every single method of a SDK class in a custom proxy class and keeping this proxy manually up to date (including phpdoc) is a unnecessary work. It renders many advantages of the type system unused.
Either we develop against an interface of the PHP SDK instead of the concrete SDK class. Then PHP automatically checks wether our mock class still fulfills the contract of the interface and the IDE shows the documentation of the interface and takes the types from the phpdoc there. Or we do it like before: Use PHPunit to mock the slow database accesses away the fast and convenient.
The mocking does not work with the final classes. The interfaces don’t exist and we don’t want to maintain them: That would be like maintaining the proxy class. So we either have snail-like unit tests running all against the same database or a bunch of unnecessary work. Could you please consider offering any kind of solution for this topic?