2009-07-28 9 views
11

A dos partes con una introducción rápida. Introducción: voy a Ruby de Perl, y estoy un poco perdido entre las opciones del marco de prueba. Entiendo que probablemente no haya una sola opción completa , pero ni siquiera puedo tener una idea clara del campo de juego.¿Hay consenso sobre los frameworks de prueba para Ruby 1.9.x?

Entonces, primero, MiniTest o Test :: Unit? Me acabo de dar cuenta de que 1.9.1 está por defecto en MiniTest ahora. No me había dado cuenta ya que todos los tutoriales anteriores de Test :: Unit aún funcionan bien. Si tiene require test/unit, en realidad obtiene MiniTest como emulador Test :: Unit (!). Mi primer pensamiento fue ir con la opción predeterminada de MiniTest (una vez que sabía que estaba allí), pero incluso los libros más recientes no parecen interesados ​​en enseñarlo. Ruby Best Practices dice "Hay diferencias significativas" entre los dos, pero elige no tratar con ellos. También ejecuta todas sus pruebas a través de Test :: Unit (más algunos complementos personalizados). El nuevo Pickaxe también tiene muy poco acerca de MiniTest per se, y en el capítulo sobre pruebas también usan la versión de emulación Test :: Unit de MiniTest. Para aclarar mi primera pregunta, entonces: ¿es MiniTest una primera opción pobre? ¿Debería usar el emulador Test :: Unit de manera predeterminada?

En segundo lugar, más allá de las opciones incorporadas, hay una empresa Rspec, Cucumber & para realizar pruebas basadas en el comportamiento. ¿La comunidad está inclinándose fuertemente hacia este estilo y este marco? ¿Debería comenzar con Rspec?

Jugaré un poco con las tres, pero tengo curiosidad por saber qué tipo de consenso (si existe) se está formando alrededor de las pruebas en Ruby 1.9.

(Un seguimiento rápido, como un recordatorio para mí mismo y para cualquier persona interesada. Ver this link para un panorama útil de las diferentes invocaciones de Test :: Unidad y Minitest en los diversos rubíes 1.8 a 1.9.1.)

Respuesta

6

¿Hay consenso? Yo diría que no. Hay una fuerte voz comunitaria para usar TDD/BDD, pero incluso así no es universal. El marco es probablemente menos importante que aplicar la práctica en primer lugar.

Creo que minitest es el reemplazo 1.9 para Test :: Unit, que solo existe como un envoltorio alrededor de la nueva biblioteca para compatibilidad con versiones anteriores. Supongo que tomar la ruta específica de minitest sería más prospectiva.

RSpec es algo diferente: menos obviamente infundido por los marcos "tradicionales" xUnit-influenciados. Vale la pena pasar algo de tiempo para ver si lo prefieres.

También hay Shoulda. aunque no sé cómo fue probado en 1.9: es más una envoltura/extensión para Test :: Unit, por lo que probablemente funcione.

Por supuesto, la diversión no se detiene allí: una vez que haya elegido un marco de prueba, va a querer un motor de burla de algún tipo. O un reemplazo de accesorio de datos.

En todos los casos, yo diría que todo marco de la cual se puede encontrar evidencia de cambios regulares, una comunidad poblada abierta y una API no odias hará el trabajo. Es poco probable que te derriben más tarde por haber hecho cualquier elección que hagas.

+1

Shoulda no es una buena idea en este momento. RSpec Matchers o Minitest son más "a prueba de futuro". Acabamos de cambiar nuestra aplicación de Shoulda a Minitest y valió la pena. –

7

He estado utilizando Rspec durante un año más o menos. Cambié de Test :: Unit específicamente porque podía imprimir de una manera legible para los humanos lo que se está probando.

Se lee como en prosa. Lo cual es una gran ventaja para mí. Pero como con todo, los resultados variarán.

describe Model do 
    it "should do what I want" do 
    this.should == that 
    it.should be_nil 
    that.should_not be_true 
    end 
end 

también reguardless del marco de pruebas también se debe pensar en una herramienta de cobertura como RCov. Se integra con rspec y le indicará dónde su código carece de pruebas.

+0

Gracias por la muestra (para dar una imagen de Rspec en acción) y la recomendación de RCov. – Telemachus

+2

En Ruby 1.9, el MiniTest/Spec incorporado usa sinaxis idéntico a eso, y tiene la ventaja (cuando tienes muchas pruebas) de funcionar considerablemente más rápido – cczona

3

Personalmente perfer rspec. Descubrí que enfocar mis pruebas en el comportamiento realmente me ayudó a superar lo que estaba tratando de hacer.

con Go rspec y obtener algo así como Factory Girl o maquinista para generar los datos de prueba, no utilice accesorios.

Con respecto a lo que dijo Mike, el proyecto rspec es bastante activo con las nuevas versiones se liberan normalmente con cada versión de rieles para ayudar a mantenerse al día con el desarrollo del marco.

+0

Gracias por las recomendaciones. Debo ser uno de los pocos, pero estoy interesado en Ruby por Ruby. No tengo ningún interés en Rails simplemente porque no tengo ningún interés en las aplicaciones web. Habiendo dicho eso, un _ton_ de actividad para un marco de prueba puede no ser una buena cosa. O al menos, no quiero volver a aprender constantemente cómo funciona la cosa. Aún así, voy a revisar Rspec. – Telemachus

+0

¡Compruébalo! Puede usar rspec para probar/especificar cualquier cosa que escriba en ruby, y es una excelente forma de hacerlo, incluso si nunca toca los rieles. – nitecoder

4

RSpec es el consenso de los carriles libros populares como "Los Carriles Camino". Los profesionales en mi humilde opinión son pruebas que se leen en inglés, formatos de salida que se leen como en inglés y comparaciones sobre la marcha. Los contras son lentos y la biblioteca a veces se siente "mágica", es decir, demasiado ajena a los codificadores que están más familiarizados con Ruby y las pruebas unitarias. RSpec también ofrece Cucumber and Gherkin, que son formas de escribir historias de usuarios que son útiles para la aceptación del cliente.

MiniTest está integrado en Ruby 1.9. Los profesionales en mi humilde opinión son veloces, muy fáciles de leer/escribir para codificadores de otros idiomas y pruebas que usan el mismo estilo de código que usarías en tu código real. MiniTest tiene mucho más de lo que la mayoría de las personas conoce, por ejemplo, MiniTest Spec tiene emparejamientos BDD similares a RSpec, MiniTest Mock es un sistema de burla, y MiniTest Benchmark es para perfiles de rendimiento.

En mi experiencia personal, las personas que crean aplicaciones de Rails tienden a RSpec, y las personas que crean código de Ruby puro tienden hacia MiniTest Unit, Spec, Mock, Benchmark, y así sucesivamente.

1

RSpec es agradable, pero creo que recientemente ha habido un montón de hablar y el movimiento detrás Minitest que viene con Ruby 1.9.x. Tiene muchas de las sutilezas de RSpec, pero es mucho más escueto y conciso.

Cuestiones relacionadas