It's easy to test public methods with PHPUnit. But what if you want to test protected or private methods?

To test those you can use reflection to create a reflection method and invoke this method like the following:

$method = new ReflectionMethod('FancyThing', 'doSomethingFancy');

$fancyThing = new FancyThing();

$method->invokeArgs($fancyThing, array($param1, ...));

Reflection can also be used for other purposes in PHP but you shouldn't overuse it, as it is very difficult to trace any problems when reflection is involved.