Testing traits (Intermediate)
Traits are a new concept introduced in PHP 5.4. Similar to Abstract classes they cannot be instantiated directly. You can always create a test class that uses a particular trait to test the functionality in that trait. However, PHPUnit has built-in functionality to dynamically create classes that use traits. This allows for simple testing of traits.
How to do it...
Consider a modified version of the CardCollection
class that is, instead, represented as a trait.
<?php trait CardCollectionTrait { //... public function count() { return count($this->cards); } //... }
You can create a test similar to what was created earlier for the CardCollection
class.
<?php class CardCollectionTraitTest extends PHPUnit_Framework_TestCase { private $cardCollection; public function setUp() { $this->cardCollection = $this->getObjectForTrait('CardCollectionTrait'); } public function testCountOnEmpty() { $this->assertEquals(0, $this->cardCollection->count()); } //... }
How it works...
Similar to how PHPUnit can be used to generate concrete implementations of abstract classes, it can also be used to generate a user of a given trait. The PHPUnit_Framework_TestCase::getObjectForTrait()
method will generate and instantiate a class that uses the trait you pass as the first argument. You can then test the trait as you would test any other class.