Cómo realizar pruebas unitarias de los rasgos PHP

Quiero saber si hay una solución sobre cómo realizar una prueba unitaria de un rasgo de PHP.

Sé que podemos probar una clase que utiliza el rasgo, pero me preguntaba si hay mejores enfoques.

Gracias por cualquier consejo de antemano 🙂

EDITAR

Una alternativa es usar el Rasgo en la clase de prueba, ya que voy a demostrar más abajo.

Pero no estoy muy interesado en este enfoque ya que no hay garantía de que no haya nombres de métodos similares entre el rasgo, la clase y también el PHPUnit_Framework_TestCase (en este ejemplo):

Aquí hay un rasgo de ejemplo:

 trait IndexableTrait { /** @var int */ private $index; /** * @param $index * @return $this * @throw \InvalidArgumentException */ public function setIndex($index) { if (false === filter_var($index, FILTER_VALIDATE_INT)) { throw new \InvalidArgumentException('$index must be integer.'); } $this->index = $index; return $this; } /** * @return int|null */ public function getIndex() { return $this->index; } } 

y su prueba:

 class TheAboveTraitTest extends \PHPUnit_Framework_TestCase { use TheAboveTrait; public function test_indexSetterAndGetter() { $this->setIndex(123); $this->assertEquals(123, $this->getIndex()); } public function test_indexIntValidation() { $this->setExpectedException(\Exception::class, '$index must be integer.'); $this->setIndex('bad index'); } } 

Puede probar un Rasgo utilizando un método similar al de los métodos concretos de una Clase abstracta.

PHPUnit tiene un método getMockForTrait que devolverá un objeto que usa el rasgo. Luego puedes probar las funciones de los rasgos.

Aquí está el ejemplo de la documentación:

 < ?php trait AbstractTrait { public function concreteMethod() { return $this->abstractMethod(); } public abstract function abstractMethod(); } class TraitClassTest extends PHPUnit_Framework_TestCase { public function testConcreteMethod() { $mock = $this->getMockForTrait('AbstractTrait'); $mock->expects($this->any()) ->method('abstractMethod') ->will($this->returnValue(TRUE)); $this->assertTrue($mock->concreteMethod()); } } ?>