2008-09-05 18 views
41

Soy un desarrollador web que trabaja en PHP. Tengo una experiencia limitada con el uso de Test Driven Development en aplicaciones de escritorio C#. En ese caso, usamos nUnit para el marco de prueba de la unidad.Test Driven Development en PHP

Me gustaría comenzar a usar TDD en nuevos proyectos, pero realmente no estoy seguro de por dónde empezar.

¿Qué recomendaciones tiene para un marco de prueba de unidades basado en PHP y cuáles son algunos buenos recursos para alguien que es bastante nuevo en el concepto de TDD?

Respuesta

39

Yo he usado tanto PHPUnit & SimpleTest y me encontré con SimpleTest a ser más fácil de usar.

En lo que respecta a TDD, no he tenido mucha suerte con él en el sentido más puro. Creo que es principalmente una cuestión de tiempo/disciplina de mi parte.

La adición de pruebas después del hecho ha sido algo útil, pero mis cosas favoritas para hacer es usar pruebas de SimpleTest que prueban los errores específicos que tengo que corregir. Eso hace que sea muy fácil verificar que las cosas estén realmente arregladas y permanezcan corregidas.

1

Debería mirar en PHPUnit, se parece mucho a nUnit.

2

SimpleTest es un gran sistema. Comencé hace 5 meses, nunca había escuchado sobre TDD, y SimpleTest es fácil de aprender, pero aún así es poderoso. En cuanto a los recursos, actualmente estoy leyendo TDD Por el ejemplo de Kent Beck, y está bien.

9

PHPUnit es un estándar, pero a veces también es abrumador, por lo que si le resulta demasiado complejo, consulte phpt para comenzar. Es muy, muy fácil escribir pruebas en él. Un pan comido para cualquier programador.

Y para responder a su pregunta de TDD, no estoy seguro de si TDD se utiliza ampliamente en el espacio de PHP. Puedo ver que el rápido desarrollo de aplicaciones y el TDD chocan un tanto (estrictamente en mi humilde opinión). TDD requiere que tengas una idea completa de lo que construyes y escribes tus pruebas por adelantado y luego implementas el código para que la prueba pase.

Por lo tanto, lo que hacemos, en cambio, es escribir muchas pruebas cuando hayamos terminado. Este no es siempre el mejor enfoque porque a veces terminas con pruebas falsas que pasan, pero que no son realmente útiles, pero al menos es algo en lo que puedes expandir. Internamente continuamos con las pruebas y básicamente escribimos una prueba para cada error que encontramos. Así es como se vuelve más sólido.

+0

hace cuanto tiempo alguien -1 esto? – mraaroncruz

+1

por cierto, este es el # 2 en goog para "tdd en php" y # 1 para "tdd php"! – mraaroncruz

+2

No tengo idea de por qué es -1. Aunque estoy de acuerdo con mi opinión. Mi punto es que apenas tengo TDD para prototipos rápidos, pero casi siempre (80-90% de las veces) TDD de lo contrario. También me gusta el phpt. No estoy seguro de por qué eso es malo. Si bien PHPUnit tiene sus ventajas, sigue siendo un marco complejo. – Till

4

Personalmente prefiero SimpleTest. Hay un corredor de prueba de línea de comandos y un corredor de prueba basado en web, e incluso hay un Eclipse plugin que le permite ejecutar pruebas unitarias desde el propio IDE. Encontré la conexión de Zend a PHPUnit mucho más difícil de trabajar, especialmente con el depurador.

La forma en que usamos SimpleTest en la empresa es con un script continuous integration que escribimos nosotros mismos. Cada vez que registramos una función en SVN, incluimos las pruebas unitarias. Cada hora más o menos, la secuencia de comandos de CI se ejecuta y llama a un script PHP de línea de comandos que ejecuta todas nuestras pruebas unitarias. Si hay algún descanso, recibo un correo electrónico. Ha sido una gran manera de reducir los errores en nuestros sistemas.

Sin embargo, puede utilizar fácilmente algo como Phing para ejecutar sus pruebas automáticamente, ya sea en un trabajo cron o con un gancho de verificación SVN.

De hecho, si desea contactarme directamente para obtener más ayuda, puede obtenerme a través de mi información de perfil en SO. Me encantaría ayudarte.

1

Otra herramienta moderna que debe buscar es Codeception. Es mucho más simple que PHPUnit e incorpora un enfoque basado en escenarios, que es bastante útil para generar documentación a partir de pruebas.

Cuestiones relacionadas