Your SlideShare is downloading. ×
CURSO DE TESTING OSL
        12 – 16 DE ABRIL 2010



              Pruebas unitarias en Ruby
                        con
...
xUnit: PLATAFORMAS

 Lenguaje /   Librería
 Plataforma
 Smalltalk    SUnit
 Java         JUnit
 C++          CppUnit
 .NET...
EJEMPLO DE TEST EN RUBY

           Estructura mínima

    require 'test/unit'

    class TC_MyTest < Test::Unit::TestCase...
ELEMENTOS: TEST CASE

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



   require 'test/u...
ELEMENTOS: TEST FIXTURES

→ Conjunto de precondiciones para ejecutar el test
correctamente.


→ Comúnmente: datos necesari...
ELEMENTOS: TEST SUITES


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


→ El orden en que estos tests...
ELEMENTOS: ASERCIÓN


       Condición que siempre se ha de cumplir



require 'test/unit'                         Otros e...
EJECUCIÓN DE UN TEST CASE

                                             SETUP
require 'test/unit'

class TC_MyTest < Test:...
TEST::UNIT EN RUBY ON RAILS


→ Test::Unit viene incluido y preconfgurado


→ Varios formatos para escribir los fxtures


...
EN RAILS: ENTORNOS
Entornos
   development           →        para desarollar (local)
   production            →        pa...
EN RAILS: ESTRUCTURA
         $ ls -F test/

         fixtures/       functional/   integration/   test_helper.rb unit/


...
EN RAILS: FIXTURES
→ Directorio test/fxtures
→ Formatos disponibles: YAML, CSV
→ Se cargan automáticamente

              ...
EN RUBY: ASSERTIONS DE
                TEST::UNIT
Assertion                       Propósito                      Ejemplo
a...
EN RAILS: ASSERTIONS
                 ADICIONALES
Assertion                     Propósito                  Ejemplo
assert_...
EN RAILS: UNIT TESTS

→ Prueban los modelos.
→ En test/unit/modelo_test.rb
→ Los test cases heredan de ActiveSupport::Test...
EN RAILS: FUNCTIONALS

→ Prueban los controladores.
→ En test/functional/nombre_controller_test.rb
→ Lost test cases hered...
MÁS COSAS QUE PODEMOS
     PROBAR CON TEST::UNIT

Vistas        → presencia de determinadas etiquetas HTML


Integración  ...
EN RAILS: PREPARAR LOS TESTS

Ejecutar migraciones pendientes
   → rake db:migrate


Clonar la DB de desarrollo a la DB de...
EN RAILS: TAREAS RAKE PARA
            TESTS UNITARIOS
rake db:test:clone             #   Recreate the test database from ...
EN RAILS: EJECUTAR TESTs

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


Ejecutar los tests unitarios    ...
¿PREGUNTAS?
Upcoming SlideShare
Loading in...5
×

Curso TDD Ruby on Rails #03: Tests unitarios

2,956

Published on

Lección 03 del curso de TDD en Ruby on Rails:
Pruebas unitarias

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,956
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Curso TDD Ruby on Rails #03: Tests unitarios"

  1. 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. 2. xUnit: PLATAFORMAS Lenguaje / Librería Plataforma Smalltalk SUnit Java JUnit C++ CppUnit .NET NUnit PHP PHPUnit Python PyUnit Ruby Test::Unit
  3. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  21. 21. ¿PREGUNTAS?

×