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




                      Mocks y stubs


Alberto Perdomo

Web:       http://albertoperdomo.net
Email:     alberto.perdomo@aentos.es
Twitter:   @albertoperdomo             http://www.aentos.com
EL PROBLEMA
→ Debemos probar el comportamiento de los componentes de
forma aislada
→ A veces los componentes dependen de objetos externos
  → Otras clases
  → Librerías externas
  → APIs, servicios web (Google Maps, Geonames, Gravatar, …)
  → Colas de mensajes (AMQP, …)
  → Llamadas a servicios externos (HTTP, FTP, XMPP, …)
  → Time
LA SOLUCIÓN: MOCK OBJECTS
→ MOCKS OBJECTS = Objetos simulados que imitan el
comportamiento de objetos reales de forma controlada


→ implementan el mismo interfaz que los objetos reales
   → los objetos cliente no saben si están usando un objeto real o uno “de
   mentira”


→ Se puede especifcar que métodos esperamos sean
llamados, con qué parámetros y qué valores debe devolver


→ Podemos probar que el objeto que estamos testeando
utiliza de forma correcta el mock
UNA VARIANTE: STUBS
→ Más simples que los mocks


→ Objetos “de mentira” que devuelven valores predefnidos


→ No podemos defnir qué métodos esperamos sean llamados


→ Cuando no nos interesa si se utiliza bien o no el objeto “de
mentira”
MOCKS Y STUBS: EQUILIBRIO
→ No se deben sobreutilizar
   → pueden complicar el mantenimiento de nuestras pruebas


→ Debemos usarlos sobre todo para todos los componentes
externos que usemos en nuestro código
   → para acelerar las pruebas (algunos servicios web, etc. tardan en
   responder varios segundos)
   → cuando el componente externo no está disponible para las pruebas
   (p.ej. un servicio web sólo disponible en producción)
   → cuando el componente externo puede fallar (si un servicio web no
   está disponible no podremos saber si nuestro código funciona bien)
MOCKS Y STUBS
→ Frameworks para muchos lenguajes y plataformas
   → Java, .NET, C++, Ruby, …


→ En Ruby / Ruby on Rails
   → mocha
   → fexmock
   → rr
   → Rspec (librería de testing) lo incorpora
   → Factory girl incorpora stubs
MOCK: EJEMPLO


         test unitario                              instanciamos el objeto mock
         def test_should_start_engine

               engine = mock('engine')
                                                    pasamos el mock al objeto que
               car = Car.new(engine)                     estamos probando
               engine.expects(:start)
                                                    creamos las expectativas en el
               car.start
                                                            objeto mock
         end

                                                    hacemos las llamadas al objeto,
                                                     si no se llama a los métodos
                                                      esperados (expectativas) se
                                                            lanzará un erro


http://yarorb.wordpress.com/2007/11/26/mocks-and-stubs-in-ruby-on-rails-the-mocha-solution/
STUB: EJEMPLO


     test unitario                                         instanciamos el objeto stub
    def test_should_return_false_for_failed_print

          document = stub("my document")
                                                           creamos las expectativas en el
          document.stubs(:print).returns(false)
                                                                   objeto mock
          ui = View.new(document)

          assert_equal false, ui.print                     pasamos el mock al objeto que
                                                                estamos probando
    end


                                                           Probamos el comportamiento
                                                             esperado en el objeto que
                                                                 queremos testear



http://yarorb.wordpress.com/2007/11/26/mocks-and-stubs-in-ruby-on-rails-the-mocha-solution/
INYECTAR COMPORTAMIENTO
    EN OBJETOS REALES
→ Algunos frameworks nos permiten inyectar un
comportamiento predefnido o expectativas en objetos reales




     Inyectar comportamiento y expectativas en un objeto real
     MyModel.should_receive(:find).with(id).and_return(@mock_model_instance)
¿PREGUNTAS?

Más contenido relacionado

Destacado

Sass: CSS con Superpoderes
Sass: CSS con SuperpoderesSass: CSS con Superpoderes
Sass: CSS con Superpoderes
Edgar Parada
 
Conviértete en un desarrollador web front-end
Conviértete en un desarrollador web front-endConviértete en un desarrollador web front-end
Conviértete en un desarrollador web front-end
video2brain_mx
 
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoRJose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas
 
CSS Preprocessors - Sass
CSS Preprocessors - SassCSS Preprocessors - Sass
CSS Preprocessors - Sass
Lourdes Montano
 
Ruby intro
Ruby introRuby intro
Ruby intro
Miguel Fernández
 
Uso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en AstronomíaUso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en Astronomía
Jose Gomez Castaño
 
Pre-procesadores CSS. SASS
Pre-procesadores CSS. SASSPre-procesadores CSS. SASS
Pre-procesadores CSS. SASS
MarionaCruz
 
Lenguaje de programación Ruby
Lenguaje de programación RubyLenguaje de programación Ruby
Lenguaje de programación Ruby
Cristian Alejandro Rojas Quintero
 
Sass y compass
Sass y compassSass y compass
Sass y compass
Medio y forma
 
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
Alberto Perdomo
 
Taller ruby
Taller rubyTaller ruby
Taller ruby
Juan Vazquez Murga
 
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
estialvarez
 
Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on Rails
ASPgems
 
2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby
Jose Emilio Labra Gayo
 
Ruby Facil
Ruby FacilRuby Facil
Ruby Facil
Pablo Morales
 
Haml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticosHaml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticos
DAVID GRILLI
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
Freelancer
 
Multiplica tu productividad usando un preprocesador de css
Multiplica tu productividad usando un preprocesador de cssMultiplica tu productividad usando un preprocesador de css
Multiplica tu productividad usando un preprocesador de css
Leonidas Esteban González
 
Curso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testingCurso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testing
Alberto Perdomo
 
Front-end Basics for Developers
Front-end Basics for DevelopersFront-end Basics for Developers
Front-end Basics for Developers
Nadal Soler
 

Destacado (20)

Sass: CSS con Superpoderes
Sass: CSS con SuperpoderesSass: CSS con Superpoderes
Sass: CSS con Superpoderes
 
Conviértete en un desarrollador web front-end
Conviértete en un desarrollador web front-endConviértete en un desarrollador web front-end
Conviértete en un desarrollador web front-end
 
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoRJose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
 
CSS Preprocessors - Sass
CSS Preprocessors - SassCSS Preprocessors - Sass
CSS Preprocessors - Sass
 
Ruby intro
Ruby introRuby intro
Ruby intro
 
Uso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en AstronomíaUso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en Astronomía
 
Pre-procesadores CSS. SASS
Pre-procesadores CSS. SASSPre-procesadores CSS. SASS
Pre-procesadores CSS. SASS
 
Lenguaje de programación Ruby
Lenguaje de programación RubyLenguaje de programación Ruby
Lenguaje de programación Ruby
 
Sass y compass
Sass y compassSass y compass
Sass y compass
 
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
 
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
 
2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby
 
Ruby Facil
Ruby FacilRuby Facil
Ruby Facil
 
Haml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticosHaml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticos
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
 
Multiplica tu productividad usando un preprocesador de css
Multiplica tu productividad usando un preprocesador de cssMultiplica tu productividad usando un preprocesador de css
Multiplica tu productividad usando un preprocesador de css
 
Curso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testingCurso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testing
 
Front-end Basics for Developers
Front-end Basics for DevelopersFront-end Basics for Developers
Front-end Basics for Developers
 

Similar a Curso TDD Ruby on Rails #06: Mocks y stubs

Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
TestingUy
 
Ejercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxEjercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docx
ssuser2e6b96
 
Test unitarios
Test unitariosTest unitarios
Test unitarios
Donewtech Solutions
 
05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos
Danae Aguilar Guzmán
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - Trovit
Jordi Gerona
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUG
Jordi Gerona
 
Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytest
Hector Canto
 
Bienvenido a la republica independiente de las pruebas unitarias con Core Data
Bienvenido a la republica independiente de las pruebas unitarias con Core DataBienvenido a la republica independiente de las pruebas unitarias con Core Data
Bienvenido a la republica independiente de las pruebas unitarias con Core Data
Alfonso Alba
 
OOP.JAVAS pjs
OOP.JAVAS pjsOOP.JAVAS pjs
OOP.JAVAS pjs
Jona Val
 
Introducción a la Programación con Javascript. Clase 3
Introducción a la Programación con Javascript. Clase 3Introducción a la Programación con Javascript. Clase 3
Introducción a la Programación con Javascript. Clase 3
xjordi
 
Componentes del E-studio
Componentes del E-studioComponentes del E-studio
Componentes del E-studio
Universidad de Concepcion
 
Mockito
MockitoMockito
Mockito
Teisen
 
Jquery 2
Jquery 2Jquery 2
Web Workers
Web WorkersWeb Workers
Codigo
CodigoCodigo
Codigo
Deynna Lopez
 
Unidad 5: Excepciones Ejercicio 4
Unidad 5: Excepciones Ejercicio 4Unidad 5: Excepciones Ejercicio 4
Unidad 5: Excepciones Ejercicio 4
Fabiola Valerio Ramirez
 
Lab herencia
Lab herenciaLab herencia
Clase numero 6
Clase numero 6Clase numero 6
Clase numero 6
cesitar2010
 
Práctica nominas
Práctica nominasPráctica nominas
Introducción poo
Introducción pooIntroducción poo
Introducción poo
g_torrealba
 

Similar a Curso TDD Ruby on Rails #06: Mocks y stubs (20)

Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
 
Ejercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxEjercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docx
 
Test unitarios
Test unitariosTest unitarios
Test unitarios
 
05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - Trovit
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUG
 
Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytest
 
Bienvenido a la republica independiente de las pruebas unitarias con Core Data
Bienvenido a la republica independiente de las pruebas unitarias con Core DataBienvenido a la republica independiente de las pruebas unitarias con Core Data
Bienvenido a la republica independiente de las pruebas unitarias con Core Data
 
OOP.JAVAS pjs
OOP.JAVAS pjsOOP.JAVAS pjs
OOP.JAVAS pjs
 
Introducción a la Programación con Javascript. Clase 3
Introducción a la Programación con Javascript. Clase 3Introducción a la Programación con Javascript. Clase 3
Introducción a la Programación con Javascript. Clase 3
 
Componentes del E-studio
Componentes del E-studioComponentes del E-studio
Componentes del E-studio
 
Mockito
MockitoMockito
Mockito
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
Web Workers
Web WorkersWeb Workers
Web Workers
 
Codigo
CodigoCodigo
Codigo
 
Unidad 5: Excepciones Ejercicio 4
Unidad 5: Excepciones Ejercicio 4Unidad 5: Excepciones Ejercicio 4
Unidad 5: Excepciones Ejercicio 4
 
Lab herencia
Lab herenciaLab herencia
Lab herencia
 
Clase numero 6
Clase numero 6Clase numero 6
Clase numero 6
 
Práctica nominas
Práctica nominasPráctica nominas
Práctica nominas
 
Introducción poo
Introducción pooIntroducción poo
Introducción poo
 

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 Neo4j
Alberto Perdomo
 
Leveraging relations at scale with Neo4j
Leveraging relations at scale with Neo4jLeveraging relations at scale with Neo4j
Leveraging relations at scale with Neo4j
Alberto 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 2011
Alberto 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 #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
Alberto 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: Shoulda
Alberto Perdomo
 
Curso TDD Ruby on Rails #04: Factorías de objetos
Curso TDD Ruby on Rails #04: Factorías de objetosCurso TDD Ruby on Rails #04: Factorías de objetos
Curso TDD Ruby on Rails #04: Factorías de objetos
Alberto Perdomo
 
Curso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitariosCurso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitarios
Alberto Perdomo
 
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
Alberto 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 (12)

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 #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
 
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
 
Curso TDD Ruby on Rails #04: Factorías de objetos
Curso TDD Ruby on Rails #04: Factorías de objetosCurso TDD Ruby on Rails #04: Factorías de objetos
Curso TDD Ruby on Rails #04: Factorías de objetos
 
Curso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitariosCurso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitarios
 
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
 
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

Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdfPresentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
giampierdiaz5
 
La Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docxLa Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docx
luiscohailatenazoa0
 
Flows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos FeaturesFlows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos Features
Paola De la Torre
 
625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf
yuberpalma
 
Inteligencia Artificial
Inteligencia ArtificialInteligencia Artificial
Inteligencia Artificial
YashiraPaye
 
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANOREVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
gisellearanguren1
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
cbtechchihuahua
 
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
codesiret
 
mantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptxmantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptx
MiguelAtencio10
 
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
AMADO SALVADOR
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
al050121024
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
mantenimientocarbra6
 
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
MiguelAtencio10
 
El uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptxEl uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptx
jgvanessa23
 
computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
YaniEscobar2
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
larapalaciosmonzon28
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
larapalaciosmonzon28
 
Refrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y ForzadoRefrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y Forzado
NicandroMartinez2
 
Modo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdfModo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdf
ranierglez
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
AbrahamCastillo42
 

Último (20)

Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdfPresentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
 
La Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docxLa Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docx
 
Flows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos FeaturesFlows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos Features
 
625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf
 
Inteligencia Artificial
Inteligencia ArtificialInteligencia Artificial
Inteligencia Artificial
 
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANOREVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
 
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
 
mantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptxmantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptx
 
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
 
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
Mantenimiento de sistemas eléctricos y electrónicosarticles-241712_recurso_6....
 
El uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptxEl uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptx
 
computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
 
Refrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y ForzadoRefrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y Forzado
 
Modo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdfModo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdf
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
 

Curso TDD Ruby on Rails #06: Mocks y stubs

  • 1. CURSO DE TESTING OSL 12 – 16 DE ABRIL 2010 Mocks y stubs Alberto Perdomo Web: http://albertoperdomo.net Email: alberto.perdomo@aentos.es Twitter: @albertoperdomo http://www.aentos.com
  • 2. EL PROBLEMA → Debemos probar el comportamiento de los componentes de forma aislada → A veces los componentes dependen de objetos externos → Otras clases → Librerías externas → APIs, servicios web (Google Maps, Geonames, Gravatar, …) → Colas de mensajes (AMQP, …) → Llamadas a servicios externos (HTTP, FTP, XMPP, …) → Time
  • 3. LA SOLUCIÓN: MOCK OBJECTS → MOCKS OBJECTS = Objetos simulados que imitan el comportamiento de objetos reales de forma controlada → implementan el mismo interfaz que los objetos reales → los objetos cliente no saben si están usando un objeto real o uno “de mentira” → Se puede especifcar que métodos esperamos sean llamados, con qué parámetros y qué valores debe devolver → Podemos probar que el objeto que estamos testeando utiliza de forma correcta el mock
  • 4. UNA VARIANTE: STUBS → Más simples que los mocks → Objetos “de mentira” que devuelven valores predefnidos → No podemos defnir qué métodos esperamos sean llamados → Cuando no nos interesa si se utiliza bien o no el objeto “de mentira”
  • 5. MOCKS Y STUBS: EQUILIBRIO → No se deben sobreutilizar → pueden complicar el mantenimiento de nuestras pruebas → Debemos usarlos sobre todo para todos los componentes externos que usemos en nuestro código → para acelerar las pruebas (algunos servicios web, etc. tardan en responder varios segundos) → cuando el componente externo no está disponible para las pruebas (p.ej. un servicio web sólo disponible en producción) → cuando el componente externo puede fallar (si un servicio web no está disponible no podremos saber si nuestro código funciona bien)
  • 6. MOCKS Y STUBS → Frameworks para muchos lenguajes y plataformas → Java, .NET, C++, Ruby, … → En Ruby / Ruby on Rails → mocha → fexmock → rr → Rspec (librería de testing) lo incorpora → Factory girl incorpora stubs
  • 7. MOCK: EJEMPLO test unitario instanciamos el objeto mock def test_should_start_engine engine = mock('engine') pasamos el mock al objeto que car = Car.new(engine) estamos probando engine.expects(:start) creamos las expectativas en el car.start objeto mock end hacemos las llamadas al objeto, si no se llama a los métodos esperados (expectativas) se lanzará un erro http://yarorb.wordpress.com/2007/11/26/mocks-and-stubs-in-ruby-on-rails-the-mocha-solution/
  • 8. STUB: EJEMPLO test unitario instanciamos el objeto stub def test_should_return_false_for_failed_print document = stub("my document") creamos las expectativas en el document.stubs(:print).returns(false) objeto mock ui = View.new(document) assert_equal false, ui.print pasamos el mock al objeto que estamos probando end Probamos el comportamiento esperado en el objeto que queremos testear http://yarorb.wordpress.com/2007/11/26/mocks-and-stubs-in-ruby-on-rails-the-mocha-solution/
  • 9. INYECTAR COMPORTAMIENTO EN OBJETOS REALES → Algunos frameworks nos permiten inyectar un comportamiento predefnido o expectativas en objetos reales Inyectar comportamiento y expectativas en un objeto real MyModel.should_receive(:find).with(id).and_return(@mock_model_instance)