Más allá del testing

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    2 Favorites

    Más allá del testing - Presentation Transcript

    1. Más allá del testing Sergio Gil Christos Zisopoulos
    2. Estrategias de testing
    3. DDT: Development Driven Testing
    4. DDT: Development Driven Testing Escribir los tests después de la primera iteración del código
    5. Por qué
    6. Por qué • A veces la especificación no existe es difusa, y hay poco tiempo
    7. Por qué • A veces la especificación no existe es difusa, y hay poco tiempo • Es más fácil para empezar
    8. Por qué • A veces la especificación no existe es difusa, y hay poco tiempo • Es más fácil para empezar • Si tienes código ya escrito sin tests, es la única manera de que los tenga =;-)
    9. Por qué
    10. Por qué • Si tu código (ya existente) no está escrito con TDD/BDD en mente, es más fácil el DDT
    11. Por qué • Si tu código (ya existente) no está escrito con TDD/BDD en mente, es más fácil el DDT • Es mucho mejor que NO testear
    12. Por qué • Si tu código (ya existente) no está escrito con TDD/BDD en mente, es más fácil el DDT • Es mucho mejor que NO testear • Es lo que hace DHH =;-)
    13. TDD: Test Driven Development
    14. TDD: Test Driven Development Escribir los tests antes de implementar el código
    15. Por qué
    16. Por qué • Te fuerza a pensar en el código y en su diseño antes de escribirlo
    17. Por qué • Te fuerza a pensar en el código y en su diseño antes de escribirlo • Te fuerza tener contratos de interacción concretos entre los componentes de tu código
    18. Por qué • Te fuerza a pensar en el código y en su diseño antes de escribirlo • Te fuerza tener contratos de interacción concretos entre los componentes de tu código • Escribir un método cuyos resultados ya conoces es más fácil que escribirlo y luego imaginar cuál será su salida
    19. Por qué • Te fuerza a pensar en el código y en su diseño antes de escribirlo • Te fuerza tener contratos de interacción concretos entre los componentes de tu código • Escribir un método cuyos resultados ya conoces es más fácil que escribirlo y luego imaginar cuál será su salida • Si quieres refactorizar un método, te asegura que no vas a romper nada
    20. BDD: Behaviour Driven Testing
    21. BDD: Behaviour Driven Testing Escribir, antes de implementar, especificaciones que luego sirvan para testear
    22. Por qué
    23. Por qué • Es descriptivo
    24. Por qué • Es descriptivo • Sirve de documentación (es legible por humanos normales)
    25. Por qué • Es descriptivo • Sirve de documentación (es legible por humanos normales) • Ayuda a crear mejores modelos y mejores interacciones entre ellos
    26. Por qué • Es descriptivo • Sirve de documentación (es legible por humanos normales) • Ayuda a crear mejores modelos y mejores interacciones entre ellos • Es más fácil de escribir
    27. Patrones y buenas prácticas
    28. El buen código es fácil de testear
    29. El buen código es fácil de testear El código fácil de testear es bueno
    30. El buen código es fácil de testear El código fácil de testear es bueno
    31. Números mágicos
    32. Números mágicos • Hasta 7 acciones por controlador
    33. Números mágicos • Hasta 7 acciones por controlador • Hasta 10 líneas por acción
    34. Números mágicos • Hasta 7 acciones por controlador • Hasta 10 líneas por acción • Si te hace falta más, sepáralo, te falta algo: • Un modelo • Un controlador • Una librería
    35. Ley de Deméter
    36. Ley de Deméter • “Habla sólo con tus inmediatos amigos”
    37. Ley de Deméter • “Habla sólo con tus inmediatos amigos” • Un objeto debería asumir lo mínimo posible acerca de la estructura o propiedades de nada más, incluyendo sus subcomponentes
    38. post.comments.map(&:owner).map(&:email) post.comments.map(&:owner_email) post.commentator_emails
    39. post.comments.map(&:owner).map(&:email) post.comments.map(&:owner_email) post.commentator_emails ¡Más fácil de mockear!
    40. # Mal: # # post # post.coments # post.comments.map(&:owner) # post.comments.map(&:owner).map(&:email) before(:each) do @owner = User.new @owner.stubs(:email).returns('christos@the-cocktail.com') @comment = Comment.new @comment.stubs(:owner).returns(@owner) @post = Post.new @post.stubs(:comments).returns([@comment]) end specify 'should return a list of comentator emails' do post.comments.map(&:owner).map(&:email).should.equal ['christos@the-cocktail.com'] end
    41. # Bien: # # comment.owner_emails -> owners.map(&:email) # post.commentator_emails -> comments.map(&:owner_emails) # before(:each) do @post = Post.new @post.stubs.(:commentator_emails).returns(['christos@the- cocktail.com']) end specify 'should return a list of comentator emails' do post.commentator_emails.should.equal ['christos@the-cocktail.com'] end
    42. @@valid_model_attributes
    43. @@valid_model_attributes # en test_helper.rb @@valid_post_attributes = { :title => 'Más allá del testing', :created_at => Time.now, :text => 'Bla, bla, bla...' }
    44. @@valid_model_attributes # en test_helper.rb @@valid_post_attributes = { :title => 'Más allá del testing', :created_at => Time.now, :text => 'Bla, bla, bla...' } it 'should be invalid without title' do @post = Post.new(@@valid_post_attributes.except(:title)) @post.should.not.validate end
    45. La decisión es QUÉ testear
    46. La decisión es QUÉ testear • No testees ActiveRecord
    47. La decisión es QUÉ testear • No testees ActiveRecord • Testea las validaciones
    48. La decisión es QUÉ testear • No testees ActiveRecord • Testea las validaciones • Testea las interacciones entre modelos (teniendo en cuenta la Ley de Deméter)
    49. La decisión es QUÉ testear
    50. La decisión es QUÉ testear • Testea siempre los casos límite
    51. La decisión es QUÉ testear • Testea siempre los casos límite • Testea las vistas puntualmente
    52. La decisión es QUÉ testear • Testea siempre los casos límite • Testea las vistas puntualmente • Testea los controladores teniendo en cuenta la Ley de Deméter
    53. La decisión es QUÉ testear • Testea siempre los casos límite • Testea las vistas puntualmente • Testea los controladores teniendo en cuenta la Ley de Deméter • Un controlador debería manejar sólo su propio modelo
    54. Algunas herramientas chulas
    55. Rcov
    56. Rcov
    57. Rcov
    58. Rcov • No es la panacea
    59. Rcov • No es la panacea • Pero mola
    60. Rcov • No es la panacea • Pero mola • Uso:
    61. Rcov • No es la panacea • Pero mola • Uso: • Gema
    62. Rcov • No es la panacea • Pero mola • Uso: • Gema • Plugin
    63. Rcov • No es la panacea • Pero mola • Uso: • Gema • Plugin • Rake
    64. Ojo: el test coverage despista a veces Combínalo con cosas como heckle (¡¡metatesting!!)
    65. Integración contínua
    66. Integración contínua • Si tienes buenos tests, tardan un rato =;-)
    67. Integración contínua • Si tienes buenos tests, tardan un rato =;-) • Durante el desarrollo, sólo ejecutas los tests del código que tocas
    68. Integración contínua • Si tienes buenos tests, tardan un rato =;-) • Durante el desarrollo, sólo ejecutas los tests del código que tocas • Para todo lo demás, CruiseControl.rb
    69. Integración contínua
    70. ¿Preguntas?
    71. Muchas gracias sergio.gil@the-cocktail.com christos@the-cocktail.com the-cocktail.com

    + Sergio GilSergio Gil, 2 years ago

    custom

    1871 views, 2 favs, 2 embeds more stats

    Ponencia sobre buenas prácticas de testing en la C more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1871
      • 1803 on SlideShare
      • 68 from embeds
    • Comments 0
    • Favorites 2
    • Downloads 32
    Most viewed embeds
    • 67 views on http://www.lacoctelera.com
    • 1 views on http://www.netvibes.com

    more

    All embeds
    • 67 views on http://www.lacoctelera.com
    • 1 views on http://www.netvibes.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories