Anna Filina has posted a quick hint around testing methods that make static methods calls to other parts of your application. Static method calls are notoriously difficult to test, especially with PHPUnit.
I had trouble testing a particularly painful codebase. It had static calls and implicit dependencies all over the place, to name just a few problems.One of the things that it often did was to call static methods that would increment counters in the database and cache stuff. Example: Record::incrementViews() It was making things difficult. To avoid messing with the original codebase too much, I came up with this quick and dirty way to ignore those dependencies.
Her solution makes use of a mockStaticDependency
method that then turns around and redefines the class in question (like her "Record" above) with a __callStatic
through an eval. She points out that usually using eval
is "evil" but in this case it made testing the functionality much simpler when no feedback was needed from the static method. In the comments on the post, someone also makes a recommendation of the Patchwork library for PHP that allows for "monkey patching" and modifying classes/functionality to redefine functions and methods in a similar way.