2011-03-30 6 views
11

Soy suscriptor de Ruby Inside, ya que estoy particularmente interesado en Rails. Ayer, el creador de Rails, David Heinemeier Hansson, dijo que simplemente está usando test/unit. Lo entendería, ya que es interno de Rails, pero parece haber dado una opinión firme. Él cree que RSpec y Cucumber son innecesariamente complicados.DHH en pruebas unitarias: ¿es innecesario el RSpec innecesariamente?

Normalmente no prestaría mucha atención, pero depende de quién diga algo. Respeto mucho a Hansson y su opinión me hizo pensar. Cuando comencé con Rails, nunca me fijé realmente en la prueba/unidad. Solo RSpec y Cucumber.

Y es por eso que quiero su conocimiento. ¿Crees que RSpec es realmente complicado por poco valor agregado? ¿Escribir prueba/unidad requiere menos tiempo y esfuerzo?

+0

Estoy de acuerdo con DHH porque la unidad/unidad de rieles se ve bien. He utilizado carriles de prueba de trabajo de marco, rspec, selenio, etc. y siento lo mismo que DHH – Ashish

+1

si tiene carga de recursos más dinero más tiempo 50% más. No hace falta decir que los requisitos relativamente congelados BDD/TDD son grandes, de lo contrario, cumpla con lo que dice DHH. Tan agradecido que escribió esta publicación en el blog .. – Abs

Respuesta

14

Mi recomendación sería usar Shoulda (extiende Test :: Unit) o ​​RSpec con Capybara, y -no- Cucumber.

Creo que vale la pena usar RSpec o Shoulda para contextos anidados. Sin embargo, RSpec es definitivamente pesado (quizás con sobrepeso), y estoy en la cerca con eso por esa razón.

Pepino, finalmente he llegado a entender, es más complicado de lo que generalmente vale la pena. Puede lograr lo que necesita de manera más simple y sólida con simples pruebas de integración y Capibara. Recuerde: ¡Capibara! = Pepino, y Capibara es bastante capaz por sí mismo.

Shoulda es agradable, porque simplemente agrega conveniencias al marco estándar de Test :: Unit, y por lo tanto es mucho más liviano que RSpec (técnicamente, cada uno resuelve un conjunto diferente de problemas, pero ambos proporcionan capacidades de contexto anidado) RSpec tiene la ventaja de hacer que las aserciones se lean de forma más natural, y también generar mensajes de error más útiles en muchos casos, sin la necesidad de escribir argumentos de mensaje en las aserciones.

Además, recuerde que Cucumber en realidad no necesita RSpec, por lo que si desea seguir usando Cucumber, puede hacerlo con solo Test :: Unit. Las opciones abundan.

+0

De hecho, los mensajes de fallas automágicas que vienen de forma gratuita desde rpsec son una gran parte de su encanto. –

+2

¡Cucumbersome! ;) –

+0

Desde que escribí esa publicación, he aprendido que Pepino no necesita ser tan engorroso. No es adecuado para todos los proyectos, pero puede ser una forma muy valiosa de codificar las especificaciones. La clave para escribir buenas pruebas de pepino es escribirlas en términos de valor comercial y evitar reverencia a la implementación específica. Si tu pepinillo contiene palabras como "página" o "clic", eso no es tan bueno. Además, las pruebas de pepino NO necesariamente tienen que ser de pila completa. Las pruebas de pepino pueden ejecutarse a un nivel inferior con algunas pruebas de integración que trabajan con Capybara para la verificación de pila completa. –

8

Todo se trata de semántica. RSpec y Test :: Unit son funcionalmente similares. Personalmente, siempre he preferido RSpec porque me pareció más natural escribir pruebas para usarlo. También me gusta la simplicidad de escribir custom matchers, y las correspondencias predeterminadas proporcionadas son útiles.

El pepino es una bestia completamente diferente. Sí, es bastante engorroso y se vuelve difícil de mantener si no organiza correctamente sus definiciones de pasos, pero tiene un caso de uso muy sólido y es cuando su cliente está escribiendo sus especificaciones.

He trabajado en proyectos en los que el cliente ha estado escribiendo Escenarios de pepino junto con uno de nuestro equipo de control de calidad. Como persona no técnica, es una forma muy accesible y natural de especificar historias de usuario en el código. Cucumber realmente nos ayudó a caminar cuando se trataba de seguir nuestras prácticas ágiles. La calidad del producto final se benefició de eso, pero no, yo no como pepino como desarrollador :)

3

Es una cuestión de gusto personal.

Me gusta escribir pruebas fáciles de pepino sin preocuparme por los detalles. Estoy probando las rutas "felices" de mi aplicación. (portátil, comprensible, lento)

Dejo los detalles a Prueba/Unidad.(Fácil, rápido)

se necesita más tiempo para entender:

get :products, :session => @session_id_for_product_banana 
assert_select "table" do 
    assert_select "td#name", "Banana" 
end 

en lugar de

When I go to the banana page 
Then I should see "Banana" 

seguro de que esas pruebas no son iguales, pero a quién le importa si la "banana" está en un div o una tabla o no tiene el html-id correcto.

No me gustan las pruebas funcionales porque después de refactorizar, las identificaciones podrían haberse ido, la expectativa de la sesión podría cambiarse. Si ese es el caso, tendrá que refactorizar su código Y pruebas. Si usa pepino, no tendría que cambiar su escenario.

+2

¿Qué sucede si le importa que el "Banana" esté en la tabla, en lugar de ser solo parte del mensaje de error "método indefinido 'buscar' para 'Banana': cadena"? – Arsen7

+0

Eso podría suceder, pero no es probable. Es mucho más probable que la identificación cambie o decida usar un div. Si la vista no contiene la lógica, normalmente encontrará este tipo de error en una prueba unitaria. También el pepino tiende a explotar con un rastro de pila en un error de tiempo de ejecución. –