Pregunta

Estoy buscando a un conjunto de pruebas fuertes rieles. No es nada que puedo entrar en detalles acerca, pero el tiempo de ejecución para todo el conjunto (unidad / funcional / cierta integración) puede correr hacia arriba de 5 minutos.

Estamos totalmente dependiente de los accesorios y estamos no estamos burlas y apagando tanto como deberíamos ser.

Nuestros próximos carreras van a ser completamente centrado en el banco de pruebas, tanto la cobertura mejora, escribiendo mejores pruebas y lo más importante escribir pruebas más eficientes.

Así, aparte de más de burla y golpearse dentro de nuestras pruebas, estamos considerando la sustitución de nuestros accesorios con más probable Factory Girl. Veo un montón de gente haciendo felices situaciones similares, pero no han sido capaces de encontrar un buen recurso en cualquier desventajas de moverse a una fábrica. He visto algunos puntos de referencia más lentas al utilizar puntos de referencia de varios recursos, pero no puede encontrar una definitiva por esto que las fábricas son buenas y es por eso que es posible que no desee utilizarlos.

¿Alguien puede educar sobre por qué o por qué no se debe utilizar fábricas?

Gracias!

¿Fue útil?

Solución

Puede haber algunos problemas con la configuración de todas las dependencias entre las entidades para una buena serie de pruebas. De todos modos, sigue siendo mucho más fácil que maintaing una gran cantidad de accesorios.

Accesorios:

  • difícil de mantener relaciones (sobre todo muchos-a-muchos);
  • tiempo de ejecución conjunto de pruebas suele ser más lento debido DB golpea;
  • pruebas son muy sensibles a los cambios en el esquema.

Las fábricas:

  • usted tropieza todo lo que no realiza la prueba en prueba de la unidad actual;
  • a prepararse entidades que se está probando con las fábricas. Aquí es donde las fábricas muestran su verdadera ventaja - es fácil de configurar nuevos casos de prueba, ya que no es necesario para mantener una tonelada de YAML-archivos para eso;
  • a concentrarse en las pruebas. Si las pruebas requieren cambiar el escenario, no cambia su forma de pensar. Mientras talones son razonables y las fábricas se pueden personalizar fácilmente, que debe estar bien.

Por lo tanto, las fábricas parecen un buen camino a seguir. Los únicos inconvenientes posibles que veo, son los siguientes:

  • tiempo que pasó la migración de los accesorios;
  • mantener un conjunto de escenarios cuerdo puede requerir un poco de esfuerzo.

Otros consejos

La respuesta de Oleg es grande, pero permítanme ofrecer la perspectiva de alguien que está utilizando ambos.

Cuerpo han sido el tipo de cabeza de turco de la comunidad Rails por un tiempo. Todo el mundo entiende los inconvenientes de los accesorios, pero nadie está realmente defendiendo sus puntos fuertes. En mi experiencia, las fábricas por sí mismos pueden convertirse fácilmente en tan difícil de mantener como accesorios (que realmente depende del esquema, pero estoy divagando). La verdadera fuerza de fábricas está en reemplazo selectivo del dolor a base de accesorio. Vamos a hablar de un par de detalles.

El primer número es el rendimiento. Si usted puede probar la mayor parte de su aplicación sin chocar con la base de datos a continuación, verá una velocidad considerable, pero para la mayoría de las aplicaciones no creo que es prudente probar sin chocar con la base de datos en su totalidad. En algún momento desea probar toda la pila. Cada vez que te burlas o talón que están haciendo una suposición acerca de una interfaz que puede contener errores sutiles. Así, suponiendo que usted necesita para golpear la base de datos en un porcentaje significativo de las pruebas, los accesorios transaccionales (que son usando los accesorios transaccionales ¿verdad?) Bien podría ser mucho más rápido que una instancia de todo un ambiente para cada prueba.

Yo diría que, con el tamaño de su conjunto de pruebas que realmente necesita mirar hacia Integración continua ampliar o reducir el desarrollo al siguiente nivel. No importa lo mucho que los acelerar, aún es mucho tiempo para que los desarrolladores esperan. Tal vez mirar a autotest así como para ayudar a nivel individual. Pero en última instancia IC va a permitirle mantener la disciplina de pruebas sin sacrificar la agilidad desarrollador.

El lugar donde realmente brillan los accesorios se encuentra en pruebas funcionales / integración. La manera en que veo es que los accesorios deben establecer un estado saludable de base para la aplicación a ensayar. La mayoría de las pruebas unitarias realmente no necesitan esto. Usted puede obtener una cobertura muy buena unidad utilizando fábricas. Sin embargo, cuando se trata de pruebas funcionales, cualquier página puede ser golpear docenas de modelos. No quiero configurar todo eso en cada prueba. Como construyo escenarios cada vez más complejos, estoy cada vez más cerca y más cerca de volver a crear un estado global de datos que es exactamente lo que los accesorios fueron diseñados para hacer en primer lugar.

Una creencia polémica sostengo es que todo lo demás igual, prefiero una prueba funcional para 20 pruebas unitarias (rieles usando el lenguaje). ¿Por qué? Debido a que la prueba funcional demuestra que el resultado final que se envía al usuario es correcta. Las pruebas unitarias son grandes para conseguir en matices de funcionalidad, pero al final del día, todavía podrían tener un error a lo largo de una interfaz que rompe todo su sitio. Las pruebas funcionales son los que me dan la confianza golpear desplegar sin llegar a cargar la página en el navegador. Yo sé que podría stub todo y probar ambas interfaces y obtener la misma cobertura, pero si puedo probar toda la pila en una prueba simple, a expensas de un poco de CPU, mucho más me gustaría hacer eso.

¿Cuáles son las mejores prácticas para mis accesorios?

  • Establecer un puñado de cada modelo para cubrir las categorías más amplias de datos
  • Cuando se añade una nueva característica importante que corta a través de muchos modelos y controladores, añadir algunos nuevos accesorios para representar los principales estados
  • Evitar la edición de accesorios viejos, excepto para añadir / quitar campos
  • Use fábricas para más pequeño / variaciones más localizadas
  • Use fábricas para la paginación de análisis u otra creación de masas que sólo se necesita para algunas pruebas

Además, permítanme recomendar Jay Fields el blog de un consejo muy bueno prueba pragmática. Lo que más me gusta de blog de Jay es que siempre ACKNowledges que la prueba es muy específico del proyecto, y lo que funciona para un proyecto no necesariamente funciona para otro. Es bajo en el dogma y largo en el pragmatismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top