2012-09-18 31 views
47

Acabo de ver un Railscast para Minitest.Minitest y Rspec

¿Cuáles son los pros y los contras del uso de RSpec frente a Minitest para probar una aplicación de rieles? ¿Qué características perderé al convertir de RSpec a Minitest?

+0

Véase p. http://stackoverflow.com/questions/8423227/migrating-from-rspec-to-minitestspec – matt

+0

Quizás estas 2 preguntas se deben combinar, ¿hay alguna manera de unir las preguntas? –

+10

¡Cerrado con +12 votos! votando para abrir –

Respuesta

69

Soy uno de los desarrolladores de RSpec, y nunca he usado minitest, así que tenga en cuenta mis sesgos al leer esta respuesta.

En general, la potencia de RSpec proviene del hecho de que reifica tantos conceptos de prueba en objetos de primera clase. Donde Test :: Unit y Minitest usan métodos simples para realizar afirmaciones, RSpec usa objetos de comparación de primera clase que admiten negación, autodescripción y más. Los ejemplos de RSpec son objetos de primera clase que admiten metadatos enriquecidos; compilaciones minitest/spec it bloquea en métodos simples, que no admiten el mismo tipo de metadatos ricos. RSpec admite la especificación de comportamientos compartidos utilizando una construcción de primera clase (grupos de ejemplos compartidos) que acepta argumentos; w/minitest puede usar inheritance or a mixin to re-use tests, pero no tiene el mismo tipo de soporte de primera clase. RSpec tiene una API de formateador explícita (y hay muchos formateadores de terceros que la usan); No estoy al tanto de que minitest tenga el mismo tipo de API de formateador de primera clase.

Como alguien que está constantemente haciendo pruebas y practicando TDD todo el día, encuentro la potencia que RSpec me da para ser muy útil. Sin embargo, a mucha gente le parece excesivo y existe un costo cognitivo adicional para las abstracciones adicionales.

Estas son algunas de las características específicas RSpec tiene que creo que le falta minitest:

  • before(:all) ganchos (tenga en cuenta que esto es una característica de usuario poder de RSpec que debe ser utilizado raramente, yo sólo he utilizado en algunos ocasiones en muchos años de uso de RSpec)
  • around(:each) ganchos
  • compartidas ejemplo, los grupos
  • compartido contextos
  • soporte de metadatos rico que puede ser u para controlar qué ejemplos se ejecutan, en qué grupos de ejemplo se incluyen contextos compartidos, en qué grupos de ejemplos se mezclan los módulos y más.
  • Soporte integrado para una amplia gama de funciones de imitación w/rspec-mocks; Minitest :: Mock es mucho más simple y más limitado en comparación.
  • RSpec tiene rspec-fire, lo cual es asombroso.

Beneficios del uso de Minitest:

  • que está construido en la biblioteca estándar, de modo que no es necesario instalar nada extra.
  • Puede usarse en los estilos def test_blah o it 'blah'.
  • El código base es muy pequeño y simple. RSpec, en virtud de su edad avanzada y características adicionales, es más grande en comparación.
  • Minitest carga más rápido que RSpec (son aproximadamente 4 archivos de código en comparación con RSpec que tiene muchos archivos repartidos en 3 gemas), pero tenga en cuenta que RSpec no es lento; En la mayoría de mis proyectos en estos días, obtengo retroalimentación de prueba de RSpec en menos de un segundo (y a menudo en menos de 500 ms).

En general, es un poco como Sinatra vs. Rails, y creo que Minitest y RSpec son buenas opciones según sus necesidades.

Una última cosa: si hay aspectos específicos de Minitest que te gustan más, pero otras cosas que te gustan más de RSpec, pueden combinarse y combinarse fácilmente. I wrote a blog post about this, si está interesado.

+0

Gracias por la increíble explicación. –

+2

Tenga en cuenta que si Boris desea integrar MiniTest con Spork, Guard, Capybara y cualquier tipo de controlador de Javascript, puede planear pasar una semana entera tratando de resolverlo y hacerlo estable. MiniTest no está listo para el horario estelar cuando se trata de tener una pila de pruebas completa para cualquier cosa que no sea la más rudimentaria de las aplicaciones de Rails. Le di el viejo examen de la universidad, pero terminó en frustración. – AKWF

4

He convertido al Minitest de especificaciones de Test/Unit con shoulda, y vale la pena. Se acaba con la repetición y dicen que también mejora la velocidad. Realmente nunca utilicé RSpec. En cambio, escribí mi propio marco de pruebas y burlas primitivas (solo con el propósito de entender la burla, la abandoné al cambiarme a Minitest). Creo que el troceo/burla en RSpec podría ser más avanzado, por lo que si ya lo aprendió, simplemente continúe usándolo. De lo contrario, quédese con Minitest, lo que le permitirá colaborar con personas que no conocen RSpec, como yo.