2008-12-26 13 views
135

¿Cuándo debería usar las especificaciones para la aplicación Rails y cuándo Cucumber (former rspec-stories)? Sé cómo funcionan ambos y activamente las especificaciones, por supuesto. Pero todavía se siente raro usar Pepino. Mi punto de vista actual sobre esto, es que es conveniente usar Cucumber cuando está implementando la aplicación para el cliente y no comprende cómo se supone que todo el sistema funciona todavía.RSpec vs Cucumber (historias RSpec)

¿Pero y si estoy haciendo mi propio proyecto? La mayor parte del tiempo, sé cómo interactúan las partes del sistema. Todo lo que necesito hacer es escribir un montón de pruebas unitarias. ¿Cuáles son las posibles situaciones en las que necesitaría Pepino entonces?

Y, como una segunda pregunta correspondiente: ¿tengo que escribir especificaciones si escribo historias de pepino? ¿No sería una doble prueba de la misma cosa?

+11

¿Cómo es que * cada * * sola * [Closed] pregunta que encuentro es cerrada como "no constructiva" por Bill the Lizard Y al mismo tiempo, la pregunta se sube muchas veces! ?! Qué me estoy perdiendo ? –

+3

Estoy totalmente de acuerdo. Todavía estoy muy confundido sobre dónde publicar preguntas como "qué es mejor práctica para hacer XXX". – Dean

+2

Acepto, encuentro buenas preguntas con respuestas perspicaces y útiles todo el tiempo sobre SO que han sido cerradas por una razón u otra. –

Respuesta

114

Si no lo ha hecho aún, puede consultar el excelente artículo de Dan North, What's in a Story? como punto de partida.

Tenemos dos usos principales para las historias de pepino. En primer lugar, debido a que la forma de la historia es muy específica, ayuda a enfocar la articulación del dueño del producto de las características que quiere construir. Este es el uso de historias de "token para una conversación", y sería valioso si implementamos las historias en código o no. Segundo, cuando el proceso está funcionando lo suficientemente bien como para tener historias completas antes de comenzamos a escribir la característica (más de un ideal que buscamos que una realidad diaria), usted tiene sus criterios de aceptación explicados claramente y usted sabe exactamente qué y cuánto construir

En nuestro trabajo Rails, las historias de pepino no sustituyen a las pruebas unitarias de rspec. Los dos van de la mano. En la práctica, las pruebas unitarias tienden a impulsar el desarrollo de los modelos y controladores, y las historias tienden a impulsar el desarrollo de las vistas (tendemos a no escribir rspec para nuestros puntos de vista) y proporcionan una buena prueba de la aplicación como un todo desde el la perspectiva del usuario

Si trabajas solo, el aspecto de comunicación puede no ser tan interesante para ti, pero las pruebas de integración que obtienes de Cucumber pueden ser. Si toma ventaja de webrat, escribir Cucumber puede ser rápido y sencillo para gran parte de su funcionalidad básica.

+5

Está combinando dos problemas por separado; 1) es bueno hacer pruebas de integración y aceptación, y 2) es una buena herramienta para escribir esas pruebas en pepino. Para 1: sí, es claramente una buena idea. Para 2, rara vez es más eficiente para un equipo de desarrollo escribir pruebas en un lenguaje con tanta indirección, cuando se pueden escribir pruebas de integración y aceptación muy legibles en rspec y capibara (o, cielo, no lo quiera, podemos investigar la biblioteca estándar de Ruby, prueba/unidad o minitest, junto con el carpincho). Vea la publicación a la que Jack Kinsella vincula a continuación. –

8

Una historia de Pepino es más una descripción del problema general que su aplicación está solucionando, en lugar de si los bits de código individuales funcionan (es decir, pruebas unitarias).

Como describe Abie, es casi una lista de requisitos que la aplicación debe cumplir, y es muy útil para la comunicación con su cliente, además de ser directamente comprobable.

+2

Exactamente. Pepino describe el uso de tu aplicación. P.ej. "Hago clic aquí y espero obtener este o aquel resultado". Las especificaciones están más en el nivel 'modelo'. Al igual que cuando llamo a esos métodos con tales y tales parámetros, espero que devuelva este resultado. – Ariejan

26

pensar en él como un ciclo:

Escribir característica de pepino, a continuación, mientras que el desarrollo de las piezas para esa característica, escribir especificaciones para completar los componentes individuales. Continúe completando las especificaciones hasta que haya escrito suficiente funcionalidad para que la característica pase, luego escriba su próxima función.

+1

Hay un ejemplo muy bueno del ciclo [BDD externo] (http://www.sarahmei.com/blog/2010/05/29/outside-in-bdd/). – rdamborsky

2

¿Pero y si estoy haciendo mi propio proyecto? La mayor parte del tiempo, sé cómo interactúan las partes del sistema. Todo lo que necesito hacer es escribir un montón de pruebas unitarias. ¿Cuáles son las posibles situaciones en las que necesitaría Pepino entonces?

Aún necesita Pepino. Lo necesita para documentar cómo ve que el sistema funciona, y lo necesita para asegurarse de que no haya roto la funcionalidad cuando cambie las cosas.

En otras palabras, necesitas historias de Pepino por las mismas razones que necesitas pruebas unitarias, solo trabajan en un nivel más alto de abstracción.

+2

No diría que Cucumber fue esencial, pero ciertamente debe tener algún tipo de pruebas de integración, ya que las pruebas unitarias normalmente se usan solo para probar las clases de forma aislada. –

+1

Derecha. Y en la mayoría de los casos, Cucumber es la forma más agradable de escribir pruebas de integración. –

6

Hoy en día puedes usar rspec con Capybara y Selenium Webdriver y evitar tener que compilar y mantener todos los analizadores de historias de Cucumber. Esto es lo que recomendaría:

  1. escribir su historia
  2. Usando RSpec, me gustaría crear un ex prueba de integración: SPEC/integraciones/socks_rspec.rb
  3. Entonces me gustaría crear una prueba de integración, que incluye una nueva descripción y bloque para cada escenario
  4. Luego implementaría la funcionalidad mínima requerida para obtener la prueba de integración y, mientras más atrás (en controladores y modelos, etc.), TDD en controladores y modelos.
  5. A medida que entran una copia de seguridad de prueba de integración debe pasar y se puede seguir añadiendo pasos para la prueba de integración
  6. repetición

Una cosa a destacar, sin embargo, es que las pruebas del controlador y de integración tienen solapamiento eso puede no ser necesario, por lo que debe usar su mejor criterio para no perder el tiempo.

Además, una vez que encuentre su ritmo, le resultará más agradable desarrollar usando BDD, hasta entonces no se sienta culpable si no siente que lo está haciendo perfecto y no lo piense demasiado. ¡Lo haras bien!

20

Mi opinión es que es una mala idea usar Pepino en la mayoría de las situaciones debido a los costos en la productividad que su sintaxis genera. Escribí extensamente sobre el tema en Why Bother With Cucumber Tests?

+0

He leído su artículo y como fan de pepino, debo decir que estoy de acuerdo con muchos puntos que cita en su artículo. Aunque, sigo creyendo que el pepino es una buena forma de formalizar las pruebas y hacerlas fácilmente legibles para los de afuera. – huug

+0

Jack - publicación fantástica. Muchas gracias por escribirlo, me has ahorrado la molestia de hacerlo yo mismo. –

+3

huug - Puede ser una buena forma de exponer las pruebas a "extraños", pero me muestras un miembro del equipo no técnico que quiere leer las pruebas, y te mostraré un equipo que está desperdiciando su presupuesto. Además, todavía tengo que trabajar con un miembro no técnico de un proyecto que quiera perder el tiempo leyendo las pruebas. No sé, tal vez tengo suerte ... –

Cuestiones relacionadas