tutorial - pruebas unitarias php
Cómo realizar pruebas unitarias de los rasgos PHP (1)
Quiero saber si hay una solución sobre cómo probar en unidad un rasgo de PHP.
Sé que podemos probar una clase que está usando 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());
}
}
?>