Test your Private/Protected Methods/Properties with any testing package and with Zero configuration.
New: Can reflect multiple classes at same time.
composer require skagarwal/reflection --dev
Import the SKAgarwal\Reflection\ReflectableTrait in your TestClass of any package. Eg: PhpUnit, PhpSpec, Laracasts\Integrated.
For PhpUnit
use SKAgarwal\Reflection\ReflectableTrait
class ModelTest extends PHPUnit_Framework_TestCase
{
use ReflectableTrait;
}
And That's it. You are all set to go. :)
Now you can do the following to test private/protected methods or properties:
By using reflect() method like this:
$randomClass = new RandomClass();
$this->reflect($randomClass);
This Method is not chainable
Note: Its preferable to use this in constructor or for PhpUnit in setUp() method etc.
By using on() method like this:
$randomClass = new RandomClass();
$this->on($randomClass)->call($method, $args = []);
This method is chainable **Note: **This method relfects the class object only once. That is only for one call to method or property. It can be used for relfecting multiple classes at same time.
Description: Reflect the Class Object
Description: Reflect the Class Object. This is Chainable Method. Possible Chaining:
$this->on($classObject)->callMethod($arguments = []);
$this->on($classObject)->call($method, $arguments = []);
$this->on($classObject)->get($property);
$this->on($classObject)->get{Proerty};
Example:
// Considering phpunit
protected function setUp()
{
$this->foo = new Foo();
$this->reflect($this->foo);
}
public function test_something()
{
$hello = $this->callSayHello(); // this will call SayHello() of class `Foo`
$this->assertEquals('Hello', $hello);
$hello = $this->on(new FooBar())->callSayHello(); // this will call SayHello() of class `FooBar`
$this->assertEquals('Hello FooBar', $hello);
$hello = $this->callSayHello(); // this will call SayHello() of class `Foo`
$this->assertEquals('Hello', $hello);
}
How can I help you explore Laravel packages today?