PHPUnit para las pruebas de integración de la línea de comandos
-
09-09-2019 - |
Pregunta
Recientemente, he comenzado a trabajar en Email2SMS cuentan en nuestro producto. Cuando me uní al proyecto de este componente tenía cobertura de código cero por unidad de pruebas. código heredado.
Desde que empecé a trabajar en él, yo estaba utilizando el enfoque de prueba primero. Pero la calidad del código era muy baja. Fue muy difícil para dividirlo y pruebas de pequeños trozos por unidad de pruebas, por lo que decidió escribir prueba de integración.
No es script PHP, que acepta algo de información de mensajes, buscar en la DB de usuario y ahorrar algo de información si todo está bien.
$last_line = system('php emailtosms.php -file=unicode_message.txt ', $retval);
$this->assertStringExistsInLogFile('Email to SMS message was not sent');
¿Es malo o no? ¿Cómo resolver este problema?
Solución
No es tan bueno.
Prueba en un nivel inferior, haciendo que el guión emailtosms.php como un simple envoltorio que procesa los argumentos de línea de comandos, y luego pasar a la clase más comprobable. Dependiendo de la etapa final, se podría escribir pruebas unitarias para hacer casi todos, pero el envío final (tal vez burlarse el paso final que realmente lo envía, y simplemente almacenarlo en una variable, a continuación, comprobar que tienes algo válido allí).
La integración final, corre el extremo a extremo completo de la clase, y comprobar su salida, mirando el registro final - o un poco más alto nivel, lo que se pone en para iniciar la sesión
.