SlideShare una empresa de Scribd logo
1 de 21
CURSO DE TESTING OSL
        12 – 16 DE ABRIL 2010



              Pruebas unitarias en Ruby
                        con
                      Test::Unit

Alberto Perdomo

Web:       http://albertoperdomo.net
Email:     alberto.perdomo@aentos.es
Twitter:   @albertoperdomo             http://www.aentos.com
xUnit: PLATAFORMAS

 Lenguaje /   Librería
 Plataforma
 Smalltalk    SUnit
 Java         JUnit
 C++          CppUnit
 .NET         NUnit
 PHP          PHPUnit
 Python       PyUnit
 Ruby         Test::Unit
EJEMPLO DE TEST EN RUBY

           Estructura mínima

    require 'test/unit'

    class TC_MyTest < Test::Unit::TestCase
      # def setup
      # end

      # def teardown
      # end

      def test_fail
        assert(false, 'Assertion was false.')
      end
    end
ELEMENTOS: TEST CASE

→ El test case es la clase más básica.
→ Todas las pruebas heredan de TestCase



   require 'test/unit'

   class TC_MyTest < Test::Unit::TestCase
     # def setup
     # end

     # def teardown
     # end

     def test_fail
       assert(false, 'Assertion was false.')
     end
   end
ELEMENTOS: TEST FIXTURES

→ Conjunto de precondiciones para ejecutar el test
correctamente.


→ Comúnmente: datos necesarios para el test



                       george:
                         id: 1
                         name: George the Monkey

                       reginald:
                         id: 2
                         name: Reginald the Pirate
ELEMENTOS: TEST SUITES


→ Un test suite engloba todos los test case con fxtures en
común.


→ El orden en que estos tests se ejecutan no importa.
ELEMENTOS: ASERCIÓN


       Condición que siempre se ha de cumplir



require 'test/unit'                         Otros ejemplos:
class TC_MyTest < Test::Unit::TestCase
  # def setup
                                            assert_nil
  # end                                     assert_not_nil
                                            assert_instance_of
  # def teardown
  # end                                     assert_raised
                                            assert_nothing_raised
  def test_fail
    assert(false, 'Assertion was false.')
  end
end
EJECUCIÓN DE UN TEST CASE

                                             SETUP
require 'test/unit'

class TC_MyTest < Test::Unit::TestCase
  # def setup
  # end

  # def teardown                              TEST
  # end

  def test_fail
    assert(false, 'Assertion was false.')
  end
end


                                            TEARDOWN
TEST::UNIT EN RUBY ON RAILS


→ Test::Unit viene incluido y preconfgurado


→ Varios formatos para escribir los fxtures


→ Scafolds vienen con tests unitarios
EN RAILS: ENTORNOS
Entornos
   development           →        para desarollar (local)
   production            →        para producción (servidor)
   test                  →        para pruebas (local)


Cada entorno tiene su propia DB
   → Podemos crear, modifcar y eliminar registros haciendo
pruebas sin que nos afecte
EN RAILS: ESTRUCTURA
         $ ls -F test/

         fixtures/       functional/   integration/   test_helper.rb unit/




                                                                 TESTS DE LOS
DATOS                                                            MODELOS

         TESTS DE                             CONFIGURACIÓN
         CONTROLADORES                        DE LOS TESTS

                              TESTS INTERACTÚANDO
                              CON n CONTROLADORES
EN RAILS: FIXTURES
→ Directorio test/fxtures
→ Formatos disponibles: YAML, CSV
→ Se cargan automáticamente

                                        # this will return the Hash for the fixture named david
           users.yml                    users(:david)

                                        # this will return the property for david called id
                                        users(:david).id
 # low & behold! I am a YAML comment!
 david:
  name: David Heinemeier Hansson
  birthday: 1979-10-15
  profession: Systems development

 steve:
  name: Steve Ross Kellock
  birthday: 1974-09-27
  profession: guy with keyboard
EN RUBY: ASSERTIONS DE
                TEST::UNIT
Assertion                       Propósito                      Ejemplo
asert(boolean, [msg])           Se asegura de que el objeto/   assert user.valid?
                                la expresión sea true
assert_equal( obj1, obj2,       Se asegura de que obj1 ==      assert_equal 5, User.count
[msg] )                         obj2 sea true
assert_not_equal( obj1,         Se asegura de que obj1 ==      assert_not_equal 0,
obj2, [msg] )                   obj2 sea false                 User.count
assert_nil( obj, [msg] )        Se asegura de que obj.nil?     assert_nil user.last_login
                                sea true
assert_not_nil( obj, [msg] )    Se asegura de que obj.nil?     assert_not_nil user.role
                                sea false
assert_instance_of( class,      Se asegura de que obj sea      assert_instance_of String,
obj, [msg] )                    del tipo class                 result
...                             ...                            ...




      Documentación online en: http://ruby-doc.org/stdlib/libdoc/test/unit/rdoc/
EN RAILS: ASSERTIONS
                 ADICIONALES
Assertion                     Propósito                  Ejemplo
assert_valid(record)          Se asegura de que el       assert_valid(user)
                              objeto record es válido
                              según el estándar de AR
                              y devuelve los mensajes
                              de error pertinentes en
                              caso de que no
assert_difference(expression Prueba la diferencia        assert_difference('User.count', -1) do
                                                          delete :destroy, :id =>
s, difference = 1, message = numérica del valor de       users(:one).to_param
nil) {...}                   retorno de una expresión
                                                         end
                              como resultado de la
                              evaluación dentro del
                              bloque pasado
assert_response(type,         Se asegura de que la       assert_response :success
message = nil)                respuesta enviada por el
                              servidor se ajusta a la
                              esperada
assert_redirected_to(options Se asegura de que la        assert_redirected_to users_path
= {}, message=nil)           petición ha sido
                              redireccionada a la URL
                              correcta
...                           ...                        ...
EN RAILS: UNIT TESTS

→ Prueban los modelos.
→ En test/unit/modelo_test.rb
→ Los test cases heredan de ActiveSupport::TestCase



                                  require 'test_helper'

                                  class PostTest < ActiveSupport::TestCase

                                    def test_should_not_save_post_without_title
                                      post = Post.new
                                      assert !post.save
                                    end

                                  end
EN RAILS: FUNCTIONALS

→ Prueban los controladores.
→ En test/functional/nombre_controller_test.rb
→ Lost test cases heredan de ActionController::TestCase



require 'test_helper'

class UsersControllerTest < ActionController::TestCase

  def test_should_get_index
    get :index
    assert_response :success
    assert_not_nil assigns(:posts)
  end

end
MÁS COSAS QUE PODEMOS
     PROBAR CON TEST::UNIT

Vistas        → presencia de determinadas etiquetas HTML


Integración   → interacción con varios controladores


Rutas         → comportamiento correcto de las rutas


Mailers       → el envío correcto de emails
EN RAILS: PREPARAR LOS TESTS

Ejecutar migraciones pendientes
   → rake db:migrate


Clonar la DB de desarrollo a la DB de test
   → rake db:test:load


TODO JUNTO
   → rake db:test:prepare
EN RAILS: TAREAS RAKE PARA
            TESTS UNITARIOS
rake db:test:clone             #   Recreate the test database from the current environment's database schema
rake db:test:clone_structure   #   Recreate the test databases from the development structure
rake db:test:load              #   Recreate the test database from the current schema.rb
rake db:test:prepare           #   Check for pending migrations and load the test schema
rake db:test:purge             #   Empty the test database
rake test                      #   Run all unit, functional and integration tests
rake test:benchmark            #   Run tests for benchmarkdb:test:prepare / Benchmark the performance tests
rake test:functionals          #   Run tests for functionalsdb:test:prepare / Run the functional tests in
test/functional
rake test:integration          # Run tests for integrationdb:test:prepare / Run the integration tests in
test/integr...
rake test:plugins              # Run tests for pluginsenvironment / Run the plugin tests in
vendor/plugins/*/**/test...
rake test:profile              # Run tests for profiledb:test:prepare / Profile the performance tests
rake test:recent               # Run tests for recentdb:test:prepare / Test recent changes
rake test:uncommitted          # Run tests for uncommitteddb:test:prepare / Test changes since last checkin
(only Su...
rake test:units                # Run tests for unitsdb:test:prepare / Run the unit tests in test/unit
EN RAILS: EJECUTAR TESTs

Ejecutar un test
   → $ cd test
   → $ ruby unit/post_test.rb


Ejecutar los tests unitarios     → $ rake test:units
Ejecutar los tests funcionales   → $ rake test:functionals


Ejecutar todos los tests            → $ rake test
¿PREGUNTAS?

Más contenido relacionado

La actualidad más candente

Lenguaje javascript
Lenguaje javascriptLenguaje javascript
Lenguaje javascriptXoch Flores
 
¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticasjaespinmora
 
Curso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsCurso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsAlberto Perdomo
 
Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)jmiguel rodriguez
 
Zen Scaffolding - Programador PHP
Zen Scaffolding - Programador PHPZen Scaffolding - Programador PHP
Zen Scaffolding - Programador PHPJuan Belón Pérez
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc X
 
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...jaircazarin
 
Ocho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScriptOcho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScriptDavid Ballén
 
Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013dayaorte
 
Compendio de clean code (robert c. martin)
Compendio de clean code (robert c. martin)Compendio de clean code (robert c. martin)
Compendio de clean code (robert c. martin)Nombre Apellidos
 

La actualidad más candente (19)

Comandos de Java
Comandos de JavaComandos de Java
Comandos de Java
 
Comandos Java
Comandos JavaComandos Java
Comandos Java
 
Semana 4 Introduccion Javascript
Semana 4   Introduccion JavascriptSemana 4   Introduccion Javascript
Semana 4 Introduccion Javascript
 
Lenguaje javascript
Lenguaje javascriptLenguaje javascript
Lenguaje javascript
 
¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas
 
Curso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsCurso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubs
 
Toi Tdd 20080409
Toi Tdd 20080409Toi Tdd 20080409
Toi Tdd 20080409
 
Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)
 
Semana 4 Javascript Estructura de Datos y ciclo FOR
Semana 4   Javascript Estructura de Datos y ciclo FORSemana 4   Javascript Estructura de Datos y ciclo FOR
Semana 4 Javascript Estructura de Datos y ciclo FOR
 
Semana 1 Estructuras de Datos en Java
Semana 1   Estructuras de Datos en JavaSemana 1   Estructuras de Datos en Java
Semana 1 Estructuras de Datos en Java
 
Best Practices
Best PracticesBest Practices
Best Practices
 
Zen Scaffolding - Programador PHP
Zen Scaffolding - Programador PHPZen Scaffolding - Programador PHP
Zen Scaffolding - Programador PHP
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzado
 
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
 
COMANDOS DE JAVA
COMANDOS DE JAVACOMANDOS DE JAVA
COMANDOS DE JAVA
 
Ocho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScriptOcho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScript
 
Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013
 
Compendio de clean code (robert c. martin)
Compendio de clean code (robert c. martin)Compendio de clean code (robert c. martin)
Compendio de clean code (robert c. martin)
 
Ajax
AjaxAjax
Ajax
 

Destacado

Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQLDesarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQLJosé Alfredo Ramírez
 
Curso de Ruby on Rails para el Master de Deusto
Curso de Ruby on Rails para el Master de DeustoCurso de Ruby on Rails para el Master de Deusto
Curso de Ruby on Rails para el Master de Deustoestialvarez
 
Ruby Mola (y por qué)
Ruby Mola (y por qué)Ruby Mola (y por qué)
Ruby Mola (y por qué)Sergio Gil
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao rubyFrancis Wagner
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD  Ruby on Rails #02: Test Driven DevelopmentCurso TDD  Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven DevelopmentAlberto Perdomo
 
Curso de Ruby on Rails para el Master de Deusto. Día 2
Curso de Ruby on Rails para el Master de Deusto. Día 2Curso de Ruby on Rails para el Master de Deusto. Día 2
Curso de Ruby on Rails para el Master de Deusto. Día 2estialvarez
 
Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on RailsASPgems
 
Code Blast 2012 - Ruby on Rails v.2012
Code Blast 2012 - Ruby on Rails v.2012Code Blast 2012 - Ruby on Rails v.2012
Code Blast 2012 - Ruby on Rails v.2012INSIGNIA4U
 
Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011Rafael Franco
 
Como escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDComo escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDHernan Wilkinson
 

Destacado (16)

TDD Course (Spanish)
TDD Course (Spanish)TDD Course (Spanish)
TDD Course (Spanish)
 
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQLDesarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
Desarrollo de Aplicaciones con Ruby on Rails y PostgreSQL
 
Ruby On Rails (Parte 1. Introducción)
Ruby On Rails (Parte 1. Introducción)Ruby On Rails (Parte 1. Introducción)
Ruby On Rails (Parte 1. Introducción)
 
Ruby On Rails (Parte II))
Ruby On Rails (Parte II))Ruby On Rails (Parte II))
Ruby On Rails (Parte II))
 
Curso de Ruby on Rails para el Master de Deusto
Curso de Ruby on Rails para el Master de DeustoCurso de Ruby on Rails para el Master de Deusto
Curso de Ruby on Rails para el Master de Deusto
 
Ruby Mola (y por qué)
Ruby Mola (y por qué)Ruby Mola (y por qué)
Ruby Mola (y por qué)
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
 
Ruby 101 session 2
Ruby 101 session 2Ruby 101 session 2
Ruby 101 session 2
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD  Ruby on Rails #02: Test Driven DevelopmentCurso TDD  Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven Development
 
Taller ruby
Taller rubyTaller ruby
Taller ruby
 
Curso de Ruby on Rails para el Master de Deusto. Día 2
Curso de Ruby on Rails para el Master de Deusto. Día 2Curso de Ruby on Rails para el Master de Deusto. Día 2
Curso de Ruby on Rails para el Master de Deusto. Día 2
 
Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on Rails
 
Ruby Facil
Ruby FacilRuby Facil
Ruby Facil
 
Code Blast 2012 - Ruby on Rails v.2012
Code Blast 2012 - Ruby on Rails v.2012Code Blast 2012 - Ruby on Rails v.2012
Code Blast 2012 - Ruby on Rails v.2012
 
Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011
 
Como escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDComo escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDD
 

Similar a Curso TDD Ruby on Rails #03: Tests unitarios

Similar a Curso TDD Ruby on Rails #03: Tests unitarios (20)

Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytest
 
Testeo unitario
Testeo unitarioTesteo unitario
Testeo unitario
 
REVIEWCLEANCODE9-11_GROUP4_FINAL.pptx
REVIEWCLEANCODE9-11_GROUP4_FINAL.pptxREVIEWCLEANCODE9-11_GROUP4_FINAL.pptx
REVIEWCLEANCODE9-11_GROUP4_FINAL.pptx
 
Componentes del E-studio
Componentes del E-studioComponentes del E-studio
Componentes del E-studio
 
Pruebas Automatizadas
Pruebas AutomatizadasPruebas Automatizadas
Pruebas Automatizadas
 
Statement
StatementStatement
Statement
 
Introducción a Unit Testing y TDD
Introducción a Unit Testing y TDDIntroducción a Unit Testing y TDD
Introducción a Unit Testing y TDD
 
Test unitarios
Test unitariosTest unitarios
Test unitarios
 
Test Driven Infrastructure
Test Driven InfrastructureTest Driven Infrastructure
Test Driven Infrastructure
 
2introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate022introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate02
 
INTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVAINTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVA
 
2) introduccion al lenguaje java
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje java
 
Shell script
Shell scriptShell script
Shell script
 
Ingenieria de sw Junit
Ingenieria de sw JunitIngenieria de sw Junit
Ingenieria de sw Junit
 
Selenium & Drupal
Selenium & DrupalSelenium & Drupal
Selenium & Drupal
 
Introducción A C# (VersióN Charla)
Introducción A C# (VersióN Charla)Introducción A C# (VersióN Charla)
Introducción A C# (VersióN Charla)
 
Javascript
JavascriptJavascript
Javascript
 
Introducción a TDD y PHPUnit
Introducción a TDD y PHPUnitIntroducción a TDD y PHPUnit
Introducción a TDD y PHPUnit
 
Bases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCBases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBC
 
Aprendiendo de la sintaxiss
Aprendiendo de la sintaxissAprendiendo de la sintaxiss
Aprendiendo de la sintaxiss
 

Más de Alberto Perdomo

Primeros pasos con la base de datos de grafos Neo4j
Primeros pasos con la base de datos de grafos Neo4jPrimeros pasos con la base de datos de grafos Neo4j
Primeros pasos con la base de datos de grafos Neo4jAlberto Perdomo
 
Leveraging relations at scale with Neo4j
Leveraging relations at scale with Neo4jLeveraging relations at scale with Neo4j
Leveraging relations at scale with Neo4jAlberto Perdomo
 
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...Alberto Perdomo
 
Rails for Mobile Devices @ Conferencia Rails 2011
Rails for Mobile Devices @ Conferencia Rails 2011Rails for Mobile Devices @ Conferencia Rails 2011
Rails for Mobile Devices @ Conferencia Rails 2011Alberto Perdomo
 
Boost your productivity!: Productivity tips for rails developers - Lightning ...
Boost your productivity!: Productivity tips for rails developers - Lightning ...Boost your productivity!: Productivity tips for rails developers - Lightning ...
Boost your productivity!: Productivity tips for rails developers - Lightning ...Alberto Perdomo
 
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...Alberto Perdomo
 
Curso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticasCurso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticasAlberto Perdomo
 
Curso TDD Ruby on Rails #05: Shoulda
Curso TDD Ruby on Rails #05: ShouldaCurso TDD Ruby on Rails #05: Shoulda
Curso TDD Ruby on Rails #05: ShouldaAlberto Perdomo
 
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...Alberto Perdomo
 

Más de Alberto Perdomo (9)

Primeros pasos con la base de datos de grafos Neo4j
Primeros pasos con la base de datos de grafos Neo4jPrimeros pasos con la base de datos de grafos Neo4j
Primeros pasos con la base de datos de grafos Neo4j
 
Leveraging relations at scale with Neo4j
Leveraging relations at scale with Neo4jLeveraging relations at scale with Neo4j
Leveraging relations at scale with Neo4j
 
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...
 
Rails for Mobile Devices @ Conferencia Rails 2011
Rails for Mobile Devices @ Conferencia Rails 2011Rails for Mobile Devices @ Conferencia Rails 2011
Rails for Mobile Devices @ Conferencia Rails 2011
 
Boost your productivity!: Productivity tips for rails developers - Lightning ...
Boost your productivity!: Productivity tips for rails developers - Lightning ...Boost your productivity!: Productivity tips for rails developers - Lightning ...
Boost your productivity!: Productivity tips for rails developers - Lightning ...
 
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
 
Curso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticasCurso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticas
 
Curso TDD Ruby on Rails #05: Shoulda
Curso TDD Ruby on Rails #05: ShouldaCurso TDD Ruby on Rails #05: Shoulda
Curso TDD Ruby on Rails #05: Shoulda
 
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...
 

Último

FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 

Último (20)

FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 

Curso TDD Ruby on Rails #03: Tests unitarios

  • 1. CURSO DE TESTING OSL 12 – 16 DE ABRIL 2010 Pruebas unitarias en Ruby con Test::Unit Alberto Perdomo Web: http://albertoperdomo.net Email: alberto.perdomo@aentos.es Twitter: @albertoperdomo http://www.aentos.com
  • 2. xUnit: PLATAFORMAS Lenguaje / Librería Plataforma Smalltalk SUnit Java JUnit C++ CppUnit .NET NUnit PHP PHPUnit Python PyUnit Ruby Test::Unit
  • 3. EJEMPLO DE TEST EN RUBY Estructura mínima require 'test/unit' class TC_MyTest < Test::Unit::TestCase # def setup # end # def teardown # end def test_fail assert(false, 'Assertion was false.') end end
  • 4. ELEMENTOS: TEST CASE → El test case es la clase más básica. → Todas las pruebas heredan de TestCase require 'test/unit' class TC_MyTest < Test::Unit::TestCase # def setup # end # def teardown # end def test_fail assert(false, 'Assertion was false.') end end
  • 5. ELEMENTOS: TEST FIXTURES → Conjunto de precondiciones para ejecutar el test correctamente. → Comúnmente: datos necesarios para el test george: id: 1 name: George the Monkey reginald: id: 2 name: Reginald the Pirate
  • 6. ELEMENTOS: TEST SUITES → Un test suite engloba todos los test case con fxtures en común. → El orden en que estos tests se ejecutan no importa.
  • 7. ELEMENTOS: ASERCIÓN Condición que siempre se ha de cumplir require 'test/unit' Otros ejemplos: class TC_MyTest < Test::Unit::TestCase # def setup assert_nil # end assert_not_nil assert_instance_of # def teardown # end assert_raised assert_nothing_raised def test_fail assert(false, 'Assertion was false.') end end
  • 8. EJECUCIÓN DE UN TEST CASE SETUP require 'test/unit' class TC_MyTest < Test::Unit::TestCase # def setup # end # def teardown TEST # end def test_fail assert(false, 'Assertion was false.') end end TEARDOWN
  • 9. TEST::UNIT EN RUBY ON RAILS → Test::Unit viene incluido y preconfgurado → Varios formatos para escribir los fxtures → Scafolds vienen con tests unitarios
  • 10. EN RAILS: ENTORNOS Entornos development → para desarollar (local) production → para producción (servidor) test → para pruebas (local) Cada entorno tiene su propia DB → Podemos crear, modifcar y eliminar registros haciendo pruebas sin que nos afecte
  • 11. EN RAILS: ESTRUCTURA $ ls -F test/ fixtures/ functional/ integration/ test_helper.rb unit/ TESTS DE LOS DATOS MODELOS TESTS DE CONFIGURACIÓN CONTROLADORES DE LOS TESTS TESTS INTERACTÚANDO CON n CONTROLADORES
  • 12. EN RAILS: FIXTURES → Directorio test/fxtures → Formatos disponibles: YAML, CSV → Se cargan automáticamente # this will return the Hash for the fixture named david users.yml users(:david) # this will return the property for david called id users(:david).id # low & behold! I am a YAML comment! david: name: David Heinemeier Hansson birthday: 1979-10-15 profession: Systems development steve: name: Steve Ross Kellock birthday: 1974-09-27 profession: guy with keyboard
  • 13. EN RUBY: ASSERTIONS DE TEST::UNIT Assertion Propósito Ejemplo asert(boolean, [msg]) Se asegura de que el objeto/ assert user.valid? la expresión sea true assert_equal( obj1, obj2, Se asegura de que obj1 == assert_equal 5, User.count [msg] ) obj2 sea true assert_not_equal( obj1, Se asegura de que obj1 == assert_not_equal 0, obj2, [msg] ) obj2 sea false User.count assert_nil( obj, [msg] ) Se asegura de que obj.nil? assert_nil user.last_login sea true assert_not_nil( obj, [msg] ) Se asegura de que obj.nil? assert_not_nil user.role sea false assert_instance_of( class, Se asegura de que obj sea assert_instance_of String, obj, [msg] ) del tipo class result ... ... ... Documentación online en: http://ruby-doc.org/stdlib/libdoc/test/unit/rdoc/
  • 14. EN RAILS: ASSERTIONS ADICIONALES Assertion Propósito Ejemplo assert_valid(record) Se asegura de que el assert_valid(user) objeto record es válido según el estándar de AR y devuelve los mensajes de error pertinentes en caso de que no assert_difference(expression Prueba la diferencia assert_difference('User.count', -1) do delete :destroy, :id => s, difference = 1, message = numérica del valor de users(:one).to_param nil) {...} retorno de una expresión end como resultado de la evaluación dentro del bloque pasado assert_response(type, Se asegura de que la assert_response :success message = nil) respuesta enviada por el servidor se ajusta a la esperada assert_redirected_to(options Se asegura de que la assert_redirected_to users_path = {}, message=nil) petición ha sido redireccionada a la URL correcta ... ... ...
  • 15. EN RAILS: UNIT TESTS → Prueban los modelos. → En test/unit/modelo_test.rb → Los test cases heredan de ActiveSupport::TestCase require 'test_helper' class PostTest < ActiveSupport::TestCase def test_should_not_save_post_without_title post = Post.new assert !post.save end end
  • 16. EN RAILS: FUNCTIONALS → Prueban los controladores. → En test/functional/nombre_controller_test.rb → Lost test cases heredan de ActionController::TestCase require 'test_helper' class UsersControllerTest < ActionController::TestCase def test_should_get_index get :index assert_response :success assert_not_nil assigns(:posts) end end
  • 17. MÁS COSAS QUE PODEMOS PROBAR CON TEST::UNIT Vistas → presencia de determinadas etiquetas HTML Integración → interacción con varios controladores Rutas → comportamiento correcto de las rutas Mailers → el envío correcto de emails
  • 18. EN RAILS: PREPARAR LOS TESTS Ejecutar migraciones pendientes → rake db:migrate Clonar la DB de desarrollo a la DB de test → rake db:test:load TODO JUNTO → rake db:test:prepare
  • 19. EN RAILS: TAREAS RAKE PARA TESTS UNITARIOS rake db:test:clone # Recreate the test database from the current environment's database schema rake db:test:clone_structure # Recreate the test databases from the development structure rake db:test:load # Recreate the test database from the current schema.rb rake db:test:prepare # Check for pending migrations and load the test schema rake db:test:purge # Empty the test database rake test # Run all unit, functional and integration tests rake test:benchmark # Run tests for benchmarkdb:test:prepare / Benchmark the performance tests rake test:functionals # Run tests for functionalsdb:test:prepare / Run the functional tests in test/functional rake test:integration # Run tests for integrationdb:test:prepare / Run the integration tests in test/integr... rake test:plugins # Run tests for pluginsenvironment / Run the plugin tests in vendor/plugins/*/**/test... rake test:profile # Run tests for profiledb:test:prepare / Profile the performance tests rake test:recent # Run tests for recentdb:test:prepare / Test recent changes rake test:uncommitted # Run tests for uncommitteddb:test:prepare / Test changes since last checkin (only Su... rake test:units # Run tests for unitsdb:test:prepare / Run the unit tests in test/unit
  • 20. EN RAILS: EJECUTAR TESTs Ejecutar un test → $ cd test → $ ruby unit/post_test.rb Ejecutar los tests unitarios → $ rake test:units Ejecutar los tests funcionales → $ rake test:functionals Ejecutar todos los tests → $ rake test