Este documento introduce el desarrollo guiado por pruebas (TDD) y PHPUnit para realizar pruebas automatizadas de código. Explica que TDD es una metodología ágil que permite crear código testable, robusto y bien diseñado mediante la traducción de casos de uso a ejemplos de prueba. Luego, detalla cómo instalar PHPUnit y escribir pruebas unitarias mediante aserciones, proveedores de datos, manejo de excepciones y métodos setUp() y tearDown().
20. Escribiendo un Test
<?php
// test/FixturesTest.php
require_once 'PHPUnit/Framework.php';
require_once '../Fixtures.php';
class FixturesTest extends PHPUnit_Framework_TestCase {
public function testCountFixturesArray() {
$fixtures = new Fixtures();
$fixtures_array = $fixtures->generate();
$this->assertEquals(1, count($fixtures_array));
}
}
21. Data Providers
<?php
class DataTest extends PHPUnit_Framework_TestCase {
/**
* @dataProvider provider
*/
public function testAdd($a, $b, $c) {
$this->assertEquals($c, $a + $b);
}
public function provider() {
return array(
array(0, 0, 0),
array(0, 1, 1),
array(1, 0, 1),
array(1, 1, 3)
);
}
}
22. Excepciones y errores
<?php
class ExceptionTest extends PHPUnit_Framework_TestCase {
/**
* @expectedException InvalidArgumentException
*/
public function testException() {
throw new InvalidArgumentException();
}
}
23. Excepciones y errores
<?php
class ExpectedErrorTest extends PHPUnit_Framework_TestCase {
/**
* @expectedException PHPUnit_Framework_Error
*/
public function testFailingInclude() {
include 'not_existing_file.php';
}
}
24. Afirmaciones
/**
* Asserts that a condition is true.
*
* @param boolean $condition
* @param string $message
* @throws PHPUnit_Framework_AssertionFailedError
*/
function assertTrue($condition, $message = '')
{
return PHPUnit_Framework_Assert::assertTrue($condition, $message);
}
25. Afirmaciones
/**
* Asserts that a variable is of a given type.
*
* @param string $expected
* @param mixed $actual
* @param string $message
* @since Method available since Release 3.5.0
*/
function assertInstanceOf($expected, $actual, $message = '')
{
return PHPUnit_Framework_Assert::assertInstanceOf($expected, $actual, $message);
}
28. Afirmaciones
Pero mejor NO las
repasamos
ahora !!!
29. setUp() y tearDown()
<?php
class FixturesTest extends PHPUnit_Framework_TestCase {
protected $item = false;
public function setUp() {
$this->item = new ItemObject();
}
public function tearDown() {
unset($this->item);
}
}