Partes pequeñas de la aplicación
Controladores-->Vistas, Peticiones
Historias de usuario, secuencia de una petición.
Que tan rapido se manejan las peticiones.
Cuantas peticiones puede manejar al mismo tiempo.
Vulnerabilidades
Es un objeto que se genera a partir de una clase que puede ser la misma que se esta probando u otra.
Tambien es un objeto generado, que adicionalmente puede recibir especificaciones o condiciones para comprobar la correcta utilización de la clase incluso de otras.
public function testExample()
{
// Create a stub for the SomeClass class.
$stub = $this->getMock('SomeClass');
// Configure the stub.
$stub->expects($this->any())
->method(‘doSomething’)
->will($this->returnValue(‘foo’));
// Create a mock for the SomeClass class,
// only mock the update() method.
$mock = $this->getMock('SomeClass', array('update'));
// Set up the expectation for the update() method
// to be called only once and with the string ‘something’
// as its parameter.
$mock->expects($this->once())
->method(‘update’)
->with($this->equalTo(‘something’));
}
Veamos un ejemplo
Requieren de un servidor de datos
Ventaja: Las pruebas pueden ser más apegadas a la realidad cuando usas el mismo esquema de BD que tienes en producción.
Desventaja: Incrementa el tiempo empleado en realizar las pruebas.
Si se prueba sobre la misma base que utilizas la "contamina" para estas pruebas se recomienda . . .
Ejemplo: Phinx
php bin/phinx migrate --environment test
Es la práctica, en ingeniería del software, de unir todo el trabajo de diferentes desarrolladores en la versión final del proyecto.
Ejemplos de herramientas de Integración continua recomendadas
La reacción del PM cuando le digo que necesito tiempo para realizar pruebas unitarias
/**
* @param Object $object
* @param $item
*/
public function exampleAction(Object $object, $item)
{
foreach ($object->getCarriers() as $i => $value) {
if ($item->getCount() > 2 && $value == 100) {
$option = $i;
}
}
//More nasty code
//More
//More
//More
//And more
foreach ($object->getOtherThing() as $option => $value) {
if ($item->getMount() > 100 && $value == 'A') {
$item->setMountType($option);
}
}
$item->setCarrier($option);
}
Había una vez un dev Jr . . .
¿Cuántos comportamientos esperas de un sistema, clase, función, objeto ... ?
Las gafas aqui significan ...
Que no se nada de testing
Que sé pero no hago testing
Que mis test me respaldan