Antes de comenzar les quiero hacer una pregunta . . .
Y mi respuesta es. . .
Las probaría antes de recomendarlas
10 preguntas y respuestas acerca de testing.
1. ¿Qué es un test?
"Prueba"
Acción de probar a alguien o algo para conocer sus cualidades, verificar su eficacia, saber cómo funciona o reacciona, o qué resultado produce.
- Mantenimiento.
- Calidad.
- Modularización.
- Detección de fallos y/o comportamientos incorrectos.
- Ahorro de tiempo.
- Tranquilidad y paz mental.
2. ¿Para que me sirve una prueba a mi cómo desarrollador?
3. ¿Cuáles son los tipos de pruebas?
Unitarias
De integración
Partes pequeñas de la aplicación
Funcionales
Controladores-->Vistas, Peticiones
Historias de usuario, secuencia de una petición.
De desempeño
Que tan rapido se manejan las peticiones.
De carga
Cuantas peticiones puede manejar al mismo tiempo.
De seguridad
Vulnerabilidades
4. ¿Que herramientas me ayudan en el testing?
5. ¿Cuál es la diferencia entre un stub y un mock?
Stub
Mock
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
6. ¿Puedo conectar mis pruebas a una base de datos?
Database fixtures
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 . . .
Utilizar herramientas para versionar el esquema de BD
Ejemplo: Phinx
php bin/phinx migrate --environment test
7. ¿Puedo automatizar las pruebas al momento de un deploy?
Integración continua
Es la práctica, en ingeniería del software, de unir todo el trabajo de diferentes desarrolladores en la versión final del proyecto.
- Al finalizar una tarea el cambio es integrado con el resto del proyecto.
- Una herramienta de integración continua detecta los cambios y ejecuta las acciones para las que fue configurada.
- Si hubiera algún fallo, notifica a los desarrolladores.
Ejemplos de herramientas de Integración continua recomendadas
8. ¿Debo destinar tiempo de desarrollo a las pruebas?
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 . . .
9. ¿Cuántas pruebas son suficientes?
¿Cuántos comportamientos esperas de un sistema, clase, función, objeto ... ?
10. ¿Las pruebas solo son requeridas en la primera versión de mi aplicación?
Las gafas aqui significan ...
Que no se nada de testing
Que sé pero no hago testing
Que mis test me respaldan
10 things about testing
By smmd
10 things about testing
10 preguntas a resolver acerca de testing.
- 183