RSpec vs Pepino (historias de RSpec) [cerrado]

136

¿Cuándo debo usar las especificaciones para la aplicación Rails y cuándo Cucumber (ex rspec-stories)? Sé cómo funcionan y usan activamente las especificaciones, por supuesto. Pero todavía se siente raro usar Pepino. Mi opinión actual sobre esto es que es conveniente usar Cucumber cuando está implementando una aplicación para el cliente y aún no entiendo cómo se supone que funciona todo el sistema.

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 situaciones posibles cuando 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 lo mismo?

snitko
fuente
12
¿Cómo es que cada sola [Cerrado] pregunta que me encuentro está cerrado como "no constructiva" por Bill el lagarto y al mismo tiempo se upvoted la pregunta muchas veces!?! Qué me estoy perdiendo ?
Ashkan Kh. Nazary
44
Estoy totalmente de acuerdo. Todavía estoy muy confundido sobre dónde publicar preguntas como "¿Cuál es la mejor práctica para hacer XXX".
Dean
3
Estoy de acuerdo, me encuentro con buenas preguntas con respuestas perspicaces y útiles todo el tiempo en SO que se han cerrado por una razón u otra.
Russell Silva
Encontré esta pregunta en 2017 porque sigue siendo relevante, y sigue siendo una gran pregunta, con excelentes respuestas. Tampoco invita a la opinión ya que los marcos en cuestión fueron diseñados principalmente por las mismas personas para dos preocupaciones completamente separadas ... pero necesitaría un poco de experiencia para saberlo.
Lunivore

Respuestas:

114

Si aún no lo ha hecho, puede consultar el excelente artículo de Dan North, ¿Qué hay en una historia? como punto de partida

Tenemos dos usos principales para las historias de pepino. Primero, debido a que la forma de la historia es muy específica, ayuda a enfocar la articulación del propietario del producto de las características que quiere construir. Este es el uso "simbólico de una conversación" de las historias, y sería valioso si implementamos o no las historias en código. En segundo lugar, cuando el proceso funciona lo suficientemente bien como para tener historias completas antes de comenzar a escribir la función (más un ideal por el que nos esforzamos que una realidad diaria), tiene sus criterios de aceptación enunciados claramente y sabe exactamente qué y cómo Mucho para construir.

En nuestro trabajo de Rails, las historias de pepino no sustituyen a las pruebas unitarias 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 nuestras vistas) y proporcionan una buena prueba de la aplicación en su conjunto perspectiva del usuario.

Si trabaja solo, el aspecto de la comunicación puede no ser tan interesante para usted, pero las pruebas de integración que obtiene de Cucumber pueden serlo. Si aprovecha Webrat , escribir Cucumber puede ser rápido e indoloro para muchas de sus funciones básicas.

Abie
fuente
66
Estás combinando dos problemas separados; 1) es bueno hacer pruebas de integración y aceptación, y 2) es una herramienta excelente para escribir esas pruebas. Para 1 - sí, es claramente una buena idea. Para 2, rara vez es más eficiente que un equipo de desarrollo escriba pruebas en un idioma con tanta indirección, cuando puede escribir pruebas de integración y aceptación muy legibles en rspec y carpincho (o, Dios no lo permita, podríamos investigar la biblioteca estándar de Ruby) prueba / unidad o minitest, junto con carpincho). Vea la publicación que Jack Kinsella enlaza a continuación.
Graham Ashton
Totalmente de acuerdo contigo Abie! ¡La integración del pepino es vital!
dpapadopoulos
26

Piense en ello como un ciclo:

Escriba su característica de pepino, luego, mientras desarrolla las piezas para esa característica, escriba 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 característica.

Josiah Kiehl
fuente
1
Hay un muy buen ejemplo del ciclo BDD de afuera hacia adentro .
rdamborsky
21

Mi opinión es que es una mala idea usar Cucumber en la mayoría de las situaciones debido a los costos en productividad que su sintaxis incurre en usted. Escribí extensamente sobre el tema en ¿Por qué molestarse con las pruebas de pepino?

Jack Kinsella
fuente
1
He leído su artículo y, como fanático del pepino, debo decir que estoy de acuerdo con muchos puntos que usted cita en su artículo. Aunque, sigo pensando que el pepino es una buena manera de formalizar las pruebas y hacerlas fácilmente legibles para los extraños.
huug
1
Jack: publicación fantástica. Muchas gracias por escribirlo, me has ahorrado la molestia de hacerlo yo mismo.
Graham Ashton
3
huug: puede ser una buena forma de exponer las pruebas a "extraños", pero me muestras a 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 ...
Graham Ashton
Voto negativo Creo que describir las características del usuario en términos de usuario es útil para mí, como desarrollador, independientemente de si los usuarios leen alguna vez mis historias de Cucumber. Es por eso que uso Pepino en todos mis proyectos y animo a otros a hacer lo mismo.
Marnen Laibow-Koser
8

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

Como Abie describe, 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.

Dave Glassborow
fuente
2
Exactamente. Pepino describe el uso de su aplicación. Por ejemplo, "hago clic aquí y espero obtener este o aquel resultado". Las especificaciones están más en el nivel de 'modelo'. Al igual que cuando llamo a esos métodos con parámetros de este tipo, espero que devuelva este resultado.
Ariejan
6

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

  1. Escribe tu historia
  2. Usando RSpec, crearía una prueba de integración ej: spec / integrations / socks_rspec.rb
  3. Luego crearía una prueba de integración que incluye una nueva descripción y se bloquea para cada escenario
  4. Luego, implementaría la funcionalidad mínima requerida para obtener la prueba de integración y mientras profundizaba (en controladores y modelos, etc.) TDD en controladores y modelos.
  5. A medida que regresa, su prueba de integración debe pasar y puede continuar agregando pasos a la prueba de integración
  6. repetir

Sin embargo, una cosa a tener en cuenta es que el controlador y las pruebas de integración tienen una superposición que puede no ser necesaria, 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!

PeppyHeppy
fuente
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 situaciones posibles cuando necesitaría pepino entonces?

Aún necesitas pepino. Lo necesita para documentar cómo ve el funcionamiento del sistema, y ​​lo necesita para asegurarse de que no ha roto la funcionalidad cuando cambia las cosas.

En otras palabras, necesita historias de pepino por las mismas razones que necesita pruebas unitarias: solo funcionan en un nivel más alto de abstracción.

Marnen Laibow-Koser
fuente
2
No diría que Cucumber era esencial, pero ciertamente debería tener algún tipo de pruebas de integración, ya que las pruebas unitarias normalmente se usan solo para probar clases de forma aislada.
Andy Waite
1
Correcto. Y en la mayoría de los casos, Cucumber es la mejor manera de escribir pruebas de integración.
Marnen Laibow-Koser