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

Made with Slides.com