phpunit-injector
phpunit-injector copied to clipboard
Deprecation notices
1x: The "Zalas\Injector\PHPUnit\TestListener\ServiceInjectorListener" class implements "PHPUnit\Framework\TestListener" that is deprecated Use the
TestHookinterfaces instead.1x: The "Zalas\Injector\PHPUnit\TestListener\ServiceInjectorListener" class uses "PHPUnit\Framework\TestListenerDefaultImplementation" that is deprecated The
TestListenerinterface is deprecated.
I am getting these deprecation notices with PHPUnit 9.2.2.
@gjuric yes, I'm afraid this extension will stop working in PHPUnit 10 due to BC incompatible changes in PHPUnit.
I've been digging around this a little bit and it seems like the TestHooks in PHPUnit 9.5 are currently not a suitable replacement for TestListeners since they provide only the class name of a test being run and not the actual Test.
I've managed to create a PoC that works by putting the code that is currently in ServiceInjectorListener into a class that is extending PHPUnit\Framework\TestListener, running the code that is in ServiceInjectorListener::startTest() in a setUp() method of this class and making my tests extend this.
I am not really a fan of this approach since one has to remember to call parent::setUp() otherwise this will not work.
Do you have any other ideas/plans on how to approach or do you even plan to work on this? Also, do you need any help?
@gjuric I don't have the capacity to work on this at the moment, so feel free to take over! I'll be happy to review your POC too.
OK, looking into it. Unfortunately my idea falls apart if you already need to extend another TestCase class (not the original, PHPUnit one). I've opened an issue on https://github.com/sebastianbergmann/phpunit/issues/4541 but it looks like there will be no suitable replacement for the current implementation.
@gjuric looks like they won't support it "by design". All's left is to wait and see what kind of support PHPUnit will get for real annotations.
There's one more thing to check. In the past, I played with AOP to do similar kind of injections. However, with PHPUnit it wasn't possible as AOP frameworks usually hook into the autoloading process and PHPUnit wasn't using composer autloading. Mind checking if that's still the case or have they switched to autoload test classes with composer?
Perhaps the new event system will somehow enable this: https://github.com/sebastianbergmann/phpunit/issues/4676
I have migrated another extension to PHPUnit 10: https://github.com/jakzal/phpunit-globals/pull/31
For anyone who'd like to pick this up, the PHPUnit globals extension also supports attributes now: https://github.com/jakzal/phpunit-globals/blob/main/src/GlobalsAttributeReader.php