2009-09-06 8 views
157

Estoy familiarizado con los conceptos (tomé clases de evaluación en la universidad), pero no estoy seguro de cómo usarlos realmente ya que nunca trabajé en un proyecto TDD "real".¿Cómo iniciarse en TDD con Ruby on Rails?

Estoy a punto de comenzar el desarrollo de un proyecto usando Ruby on Rails (lo más probable es que use 2.3). Esta aplicación se usará para administrar datos, usuarios y algunos archivos. No será demasiado complicado al principio, pero podría escalar mucho en los próximos 6 meses, así que creo que este es el momento adecuado para obtener más información sobre TDD.

Tengo una idea básica de cómo hacerlo, pero todavía necesitan algunos consejos y consejos:

  • Lo Ruby on Rails TDD 101 artículo debería leer?

  • ¿Qué necesito para probar?

  • ¿Qué gema/complemento debo usar?

  • ¿Debo usar rspec? ¿Algo más?

  • Una vez que tengo todas mis clases de prueba, ¿cómo voy y las despliego? (Por ejemplo: Integración continua)

  • ¿Cuánto tiempo consume realmente TDD?

  • ¿Necesito leer un libro sobre esto o puedo obtener todo simplemente jugando con él y leyendo tutoriales en línea? Si necesito leer un libro, ¿qué libro?


me gustaría aprender con ejemplos tan podría alguien decirme cómo iba a ir a tomar un enfoque TDD para resolver este problema:

tengo Empresas. Tengo contactos. Un contacto se puede vincular a 1 compañía. Una compañía puede tener múltiples contactos. I desea crear formas de crear contactos, empresas y contactos de enlace a las empresas.

Usted no tiene que utilizar este ejemplo en su respuesta pero ayudaría :)

Respuesta

192

¿Qué artículo de Ruby on Rails TDD 101 debo leer?

Comenzaré con a guide to testing rails applications.

También Railscast tiene excelentes capturas de pantalla sobre cómo usar diferentes herramientas de prueba.

¿Qué necesito para verificar?

Comenzaré con los modelos, ya que son fáciles de probar. La regla simple es que debe cubrir cada declaración if en su prueba.

Debe probar el propósito del método (para asegurarse de que funciona como se espera) así como también todos los casos extremos.

También asegúrese de no terminar con las pruebas.

¿Qué gema/complemento debo usar? ¿Debo usar rspec? ¿Algo más?

Cuando empiece, simplemente use Test Unit. Puede usar rspec o cucumber después de familiarizarse con los conceptos básicos.

Autotest es una buena herramienta para tener si quieres ser realmente impulsado por la prueba. Pero es un 'buen tener' no requerido.

Una vez que tengo todas mis clases de prueba, ¿cómo puedo ir y desplegarlas?

No estoy seguro de la pregunta. Usualmente no implementa las pruebas. Una vez que tenga todas sus clases de prueba, simplemente escriba 'rake test' para ejecutar todas sus pruebas.

¿Cuánto tiempo consume realmente TDD?

Ahorra tiempo realmente. Si te gusta el rompecabezas laberinto, sabes que casi siempre es más fácil resolverlo si pasas de principio a fin. Lo mismo con TDD. Sin Test Driven, estás constantemente pensando "¿qué debo hacer ahora?". Con Test Driven, la prueba te dirá qué hacer a continuación (se rompe si la lógica no está allí, así que solo necesitas arreglar la parte rota). También tiene menos errores que le ahorrarán mucho tiempo a largo plazo.

¿Es necesario leer un libro acerca de esto o puedo conseguir todo sólo por jugar un rato con él y la lectura en línea tutoriales? Si necesito leer un libro, ¿qué libro?

No necesita un libro. La forma más eficiente de aprender algo es: solo hazlo. Vuelva al libro o recursos en línea una vez que encuentre una pregunta o problema. Esto también es ágil.

En su ejemplo, las cosas que necesitan pruebas son: Un contacto puede vincularse a 1 empresa, una empresa puede tener múltiples contactos, crear formas de crear contactos y vincular contactos con empresas.

class CompanyTest <Test::Unit 
    def test_relationship # test associations/relationships 
     c = companies(:some_company) 
     assert_equal [a list of contacts], c.contacts # make sure a company can have multiple contacts 
    end 
end 

class ContactTest<Test::Unit 
    def test_relationships 
     c = contact(:some_contact) 
     assert_equal some_company, c.company # make sure the contact link to 1 company 
    end 

    def test_create/add 
     # test create contacts, here you need to make sure the contact is created correctly, and linked to company correctly 
    end 
end 
+0

¡gracias por esta respuesta realmente completa! – marcgg

+0

Muchas gracias. Soy un novato y realmente me ayudó a entender el propósito de TDD – qasimzee

+3

El enlace al artículo está roto, pero lo encontré aquí: http://web.archive.org/web/20100325215651/http://bloritsch.d -haven.net/articles/2008/07/03/test-driven-development-101 – fivetwentysix

5

TDD es todo acerca de cómo escribir primero las pruebas. Esto básicamente te obliga a escribir tu propio cliente antes de escribir el código de tu aplicación. El ciclo generalmente es escribir una prueba para una API que no existe, ejecutar la prueba esperando que falle, escribir el código de la API, ejecutar la prueba nuevamente y asegurarse de que pase. Luego escribe tu próxima prueba ... y así sucesivamente.

Le puede interesar Rails guide.

+0

Gracias por la respuesta, el enlace de la guía de rieles es especialmente útil – marcgg

3
Qué joya

/plugin debe usar?

Siempre he disfrutado shoulda.

¿Cuánto tiempo consume realmente TDD?

La razón por la que siempre he favorecido el desarrollo de TDD es que se centra en cómo implementaré una pieza específica de código. Tengo la sensación anecdótica de que cada vez que me adhiero con más fuerza a los principios de TDD, paso menos tiempo retrabajándome más tarde. Sin embargo, la cantidad de tiempo invertido depende de qué tan bien escriba las pruebas unitarias. Si las pruebas de la unidad no capturan el comportamiento esperado, todo el tiempo que se gasta en ellas se desperdicia.

13

He producido una serie de videos de 6 episodios que se impartió como clase pública en San Francisco en el verano de 2010. El material cubre las pruebas y la eficiencia del desarrollador en Rails 2.3 utilizando RSpec 1.3. Un poco anticuadas, pero los principales conceptos se aplican a Rails 3 con Rspec 2.x

http://www.rubyfocus.biz/class_video/2010/07/19/rails_tdd_class_1.html

9

recomiendo este libro: Ruby on Rails Tutorial. Ya casi termino con eso. El libro usa TDD el libro completo. ¡Darle una oportunidad!

+0

El enlace no funciona –

+0

@Deepak intente nuevamente! – sivabudh