Área de Gestión de Proyectos
Adrián Alonso Vega
Lo ideal > 70% del código del proyecto
TDD es una metodología que recomienda realizar los test antes de escribir el código que pasaría dicho test. La comunidad defensora de hacer TDD asegura que de esta forma se diseña mejor la aplicación y se garantiza una cobertura de test dado que el test está implementado.
Mientras se va desarrollando, de forma complementaria al desarrollo en sí, programar y ejecutar los tests ayudan a mantener la calidad de código como mencionábamos anteriormente y a asegurar el funcionamiento del software tal y como la especificación determina.
Seguir escribiendo tests tanto para modificaciones futuras como para solución de bugs detectados a posteriori, son una buena práctica a mantener. Por una parte, a mayor cobertura de tests mayor confianza se debe tener en que seguirá el correcto funcionamiento.
Por otra parte, al detectar un error, resolverlo y añadir el test que previene que ese bug no vuelva a suceder en el futuro. Esto mejora la calidad del conjunto de tests y la estabilidad del proyecto.
{
"require-dev": {
"phpunit/phpunit": "5.0.*"
}
}
src/
tests/
composer.json
phpunit.xml
instalamos en el proyecto
jerarquía de carpetas
class XStringsTest extends PHPUnit_Framework_TestCase{
/**
* Test for startWith method.
*
* @test
*/
public function testStartWith()
{
$xstring = new XString('hello world');
$this->assertTrue($xstring->startWith('hello'));
$this->assertFalse($xstring->startWith('world'));
}
}
Ejemplo de un TEST
vendor/bin/phpunit --coverage-html coverage
--coverage-text -v --debug --colors=always
--stop-on-failure --stop-on-error
Lanzar Tests
Fichero phpunit.xml.dist
CONTINUOUS CODE QUALITY
Un test tiene tres partes, que se identifican con las siglas AAA en inglés:
Arrange (Preparar)
Act (Actuar)
Assert (Afirmar).
class CalculatorTest extends \PHPUnit_Framework_TestCase
{
public function testAdd()
{
// ARRANGE
$calc = new Calculator();
// ACT
$result = $calc->add(30, 12);
// ASSERT
$this->assertEquals(42, $result);
}
}
Si es dificil probar la clase quizás esta mal diseñada.
- Demasiadas dependencias (desacoplar)
- Demasiada responsabilidad (dividir en clases)
Los tests deben ser sencillos
Dummy
Fake
Stubs
Mock
¿Que usar para Mockear? PHPUnit, Prophecy, Mockery, Phake, AspectMock
https://github.com/liip/LiipFunctionalTestBundle
Helpers que simplifica los tests
Facilita lanzamiento de fixtures
Permite lanzar fixtures en sqlite
Referenciar fixtures en los tests
Autenticar a un cliente
Enseñar DoctrineBuilderMock
LaLigaWebTestCase
Traits y Helpers para las mismas tareas
VER CENTRO DE RECURSOS
VER KIT SELECTOR
VER GASTOS
SHOW ME THE CODE
Gitflow: https://github.com/nvie/gitflow
JENKINS
JENKINS