¿Cómo empezar a usar TDD con Ruby on Rails? [cerrado]


Estoy familiarizado con los conceptos (tomé clases de prueba en la universidad), pero no estoy seguro de cómo usarlos realmente, ya que nunca trabajé en un proyecto TDD "real".

Estoy a punto de comenzar el desarrollo de un proyecto usando Ruby on Rails (muy probablemente usando 2.3). Esta aplicación se utilizará 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 siento que este es el momento adecuado para profundizar en TDD.

Tengo un idea básica sobre cómo hacerlo, pero todavía necesito algunos consejos y consejos:

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

  • ¿Qué necesito probar?

  • ¿Qué gema / plugin debo usar?

  • Debo usar rspec? Algo más?

  • Una vez que tengo todas mis clases de prueba, ¿cómo puedo implementarlas? (por ejemplo: Integración continua)

  • Cómo realmente consume tiempo TDD es?

  • ¿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 gusta aprender con ejemplos, así que alguien podría decirme cómo iría y tomaría un enfoque TDD para resolver este problema:

Tengo Empresas. Tengo contactos. Un el contacto se puede vincular a 1 empresa. Un la empresa puede tener múltiples contactos. Me quieres crear formas de crear contactos, empresas y contactos de enlace a las empresas.

No tiene que usar este ejemplo en su respuesta, pero ayudaría :)

Author: marcgg, 2009-09-06

7 answers

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

Comenzaré con una guía para probar aplicaciones rails.

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

¿Qué necesito probar?

Comenzaré con los modelos, ya que son fáciles de probar. La regla simple es que debe cubrir todas las declaraciones if en su prueba.

Usted debe probar el propósito de el método (para asegurarse de que está funcionando como se esperaba), así como todos los casos de borde.

También asegúrese de no terminar sobre la prueba.

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

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

Autotest es una buena herramienta para tener si quieres ser realmente prueba conducida. Pero es un 'buen tener' no requerir.

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

No estoy seguro de la pregunta. Normalmente no despliegan 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 el TDD?

Realmente ahorra tiempo. Si te gusta el rompecabezas del laberinto, sabes que casi siempre es más fácil resolverlo si vas de principio a fin. Mismo con TDD. Sin Ensayo Impulsado estás constantemente pensando 'qué debo hacer a continuación'. Con Test Driven, la prueba le dirá qué hacer a continuación (se rompe si la lógica no está allí, por lo que solo necesita arreglar la parte rota). También tiene menos errores que le ahorrará mucho tiempo a largo plazo.

¿Necesito leer un libro sobre esto o puedo conseguir todo simplemente jugando alrededor con él y la lectura en línea tutoriales? Si necesito leer un libro, ¿qué libro?

No necesitas un libro. La forma más eficiente de aprender cualquier cosa es: simplemente hazlo. Vuelva al libro o a los recursos en línea una vez que encuentre una pregunta o un 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 varios contactos, crear formas de crear contactos y vincular contactos a 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
 197
Author: ez.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-20 11:16:56

He producido una serie de videos de 6 episodios que se enseñó como una 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. Ligeramente anticuado, pero los conceptos principales se aplican a Rails 3 con Rspec 2.x

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

 13
Author: Wolfram Arnold,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-17 08:35:18

Recomiendo este libro: Tutorial de Ruby on Rails. Ya casi termino. El libro usa TDD el entero libro. ¡Inténtalo!

 9
Author: sivabudh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-20 12:18:33

Recomiendo este libro: Desarrollo Web ágil con Rails

 8
Author: JRL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-06 20:03:39

TDD se trata de 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, ir a escribir su código de API, ejecutar su prueba de nuevo y asegurarse de que pasa. Entonces escribe tu próxima prueba... y así sucesivamente.

También te puede interesar esta guía de Rails .

 5
Author: Andy Gaskell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-06 20:43:33

Utilizo:

  1. Debería y rspec para las pruebas
  2. Mocha para burlarse
  3. Factory_girl para fábricas
  4. parallel_specs para pruebas más rápidas
  5. metric_fu para el análisis de código
 5
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-24 18:22:21

¿Qué gema/plugin debo usar?

Siempre he disfrutado debería.

¿Cuánto tiempo consume realmente el 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 más fuertemente a los principios de TDD paso menos tiempo trabajando más tarde. Sin embargo, la cantidad de tiempo invertido depende de lo bien que escriba las pruebas unitarias. Si las pruebas unitarias no capture el comportamiento esperado, todo el tiempo dedicado a ellos se pierde.

 3
Author: Patrick Robertson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-06 22:56:01