¿Cómo hacer Test Driven Development (TDD) en Drupal?


30
  • ¿Cuáles son las herramientas que utiliza TDD en Drupal (módulos PHP, módulos Drupal, etc.)?
  • ¿Cómo es su flujo de trabajo de confirmación / prueba / implementación? ¿Utiliza Phing, PHPUnderControl, Hudson para administrar este flujo de trabajo?
  • ¿De qué manera las pruebas unitarias hacen que su código sea más confiable?
  • ¿Necesita un servidor de prueba de unidad independiente, costoso e independiente, o puede hacerlo desde una computadora portátil?

Sé que Robert escribió una excelente publicación técnica aquí sobre las pruebas unitarias en Drupal con SimpleTest; Estoy más interesado en cubrir el flujo de trabajo y la parte de configuración. Actualmente tengo una máquina de desarrollo, un servidor de montaje y producción. Tanto los sitios de producción como los de escenario se ejecutan en una CPU Dreamhost VPS de 300 MB de RAM / 300 MHz

Respuestas:


8

En el mundo del rubí, TDD se ve facilitado por las herramientas integradas en el marco. Factory Girl, Mocha, rSpec y otros permiten a los desarrolladores crear fácilmente y dinámicamente pruebas que aborden los casos de prueba necesarios.

También me ha frustrado la falta de herramientas TDD en Drupal. Mi mayor problema con ellos es la cantidad de tiempo que lleva ejecutar una sola prueba. Los ciclos de desarrollo no se pueden ralentizar mediante pruebas individuales que tardan entre 60 y 90 segundos en cada iteración. Los conjuntos de pruebas completos se ejecutarían en el marco de tiempo de varias horas, si se molesta en escribir las pruebas.

Sospecho que tiene que ver con copiar una base de datos completa cada vez que se ejecuta una prueba, pero no es probable que cambie en el futuro cercano de lo que puedo decir, especialmente si necesita usar DrupalWebTestCase para hacerlo.

Estoy pirateando una solución usando Phactory y phpunit, que inicia Drupal manualmente. Obviamente se encuentra con algunos problemas y no lo he terminado, pero está llegando allí.

Afortunadamente, la mayor parte de mi trabajo está en la capa de fondo, por lo que puedo permanecer en el nivel DRUPAL_BOOTSTRAP_DATABASE. Pero me encuentro con más situaciones en las que necesitaré la pila completa.

Al final, TDD en Drupal no está bien soportado, por lo que puede escribir el suyo propio para que funcione fuera del marco de prueba de drupal o soportar el bajo rendimiento.

- ACTUALIZACIÓN -

He configurado con éxito una integración completa de Drupal con Phactory, y ahora estoy ejecutando mis pruebas a través de phpunit en lugar del caso de prueba web de Drupal. Entonces es posible.

Espero llegar a un punto en el que pueda liberarlo y que pueda incorporarse al documento de Phactory.

- ACTUALIZACIÓN 2 -

Doc sobre cómo configuro Phactory está en https://github.com/trimbletodd/phactory .


Gracias por tu contribución. Es muy interesante lo que está sucediendo con Phactory para pruebas unitarias. Espero ver ese módulo de Drupal que has estado cocinando;)
barista aficionado

Puse un documento rápido de cómo estoy manejando Phactory dentro de Drupal en mi tenedor. Envié una solicitud de extracción al maestro, pero aún no se ha incorporado. github.com/trimbletodd/phactory
trimbletodd

Esta pregunta y sus respuestas siguen volviendo a este día. Usted rockea por rodar su propio tenedor / solución. Por lo tanto, recibirá el premio de respuesta aceptado, señor.
barista aficionado

12

Como el blog de Mark está fuera de línea, mencionaré algunas de las herramientas que su equipo ha implementado:

Prueba funcional: prueba de
unidad de selenio :
servidor de compilación más simple : Jenkins
Benchmarking de rendimiento: XDebug + Cachegrind

En los dos años transcurridos desde que hice esta pregunta, he visto algunas herramientas adicionales ganar popularidad en la escena TDD. Hoy en día, cuando se habla de Desarrollo impulsado por pruebas (en un contexto de Drupal, por supuesto), hay dos caras de la misma moneda: las pruebas de front-end y las de back-end.

Aquí hay dos presentaciones que se destacan del último Drupalcon Portland 2013 que representan este asunto:

Desarrollo, By The Numbers , backend testing.
Pruebas automatizadas con Jasmine y PhantomJS , pruebas frontend.

La primera presentación no está relacionada con pruebas unitarias o funcionales (estrictamente hablando), se trata más de herramientas para medir la calidad del código. Sin embargo, siento que está algo relacionado con el tema.


1
¡Guauu! ¡Gracias por regresar 2 AÑOS más tarde para contarnos lo que descubriste! You rock :)
Chapabu

5

Lo único que sé es que para los módulos contribuidos, puede habilitar la prueba automatizada de confirmaciones y parches en la cola de problemas, consulte http://drupal.org/node/689990 . Todavía es algo inestable, especialmente si tiene dependencias.

La mayoría de los proyectos probablemente estén haciendo algo más en la línea del desarrollo impulsado por errores, que básicamente se reduce a escribir una prueba primero cuando se encuentra un error y luego corregirlo. Como mucho ;)

Desde mi experiencia personal, TDD es bastante difícil en Drupal, porque a menudo no escribes (solo) pruebas unitarias con Simpletest sino pruebas de integración, donde ves páginas y envías formularios. Por lo tanto, puede ser bastante difícil escribir buenas pruebas por adelantado. Pero tal vez no estoy acostumbrado a hacerlo :)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.