SlideShare a Scribd company logo
1 of 11
CURSO DE TESTING OSL
        12 – 16 DE ABRIL 2010




                  Factorías de objetos


Alberto Perdomo

Web:       http://albertoperdomo.net
Email:     alberto.perdomo@aentos.es
Twitter:   @albertoperdomo             http://www.aentos.com
PROBLEMAS DE LOS FIXTURES:
     DATOS ESPECÍFICOS

→ A veces hacen falta datos específcos para ciertas pruebas
pero están disponibles para todos los tests.


→ Ejemplo:
   Hemos implementado la gestión de cobros y para probar los
   casos extremos necesitamos una instancia de usuario sin
   saldo sufciente.
PROBLEMAS DE LOS FIXTURES:
      MANTENIBILIDAD

→ incómodos


→ difíciles de mantener


→ a menudo las relaciones acaban “rotas”.
PROBLEMA RESUELTO:
        FACTORÍAS DE OBJETOS

→ compatibles con los fxtures


→ usa lo que más te guste o lo que mejor se adapte a la situación


→ ¡extremadamente fexibles!
VARIAS ALTERNATIVAS
Factory Girl
   → http://github.com/thoughtbot/factory_girl

Machinist
   → http://github.com/notahat/machinist

Object daddy
   → http://github.com/fogic/object_daddy

Fixture Replacement
   → http://github.com/smtlaissezfaire/fxturereplacement



y otras...
FACTORY GIRL: DEFINICIÓN

Se suelen defnir
   → todas dentro del mismo fchero → test/factories.rb
   → o en fcheros separados test/factories/user.rb etc.


  # This will guess the User class
  Factory.define :user do |u|
                                      test/factories.rb
    u.first_name 'John'               spec/factories.rb
    u.last_name 'Doe'                 test/factories/*.rb
    u.admin false
  end
                                      spec/factories/*.rb
FACTORY GIRL: AVANZADO
Lazy attributes
Factory.define :user do |u|
  # ...
  u.activation_code { User.generate_activation_code }
end




Dependent Attributes
Factory.define   :user do |u|
  u.first_name   'Joe'
  u.last_name    'Blow'
  u.email {|a|   "#{a.first_name}.#{a.last_name}@example.com".downcase }
end

Factory(:user, :last_name => 'Doe').email
# => "joe.doe@example.com"
FACTORY GIRL: AVANZADO
Asociaciones
Factory.define :post do |p|
  # ...
  p.author {|author| author.association(:user, :last_name => 'Writely') }
end




Secuencias
# Defines a new sequence                     Ejemplo: uso de sequence para el
Factory.sequence :email do |n|               email dentro de la factoría de usuarios
  "person#{n}@example.com"
end
                                              Factory.define :user do |f|
Factory.next :email                             f.email { Factory.next(:email) }
# => "person1@example.com"                    end

Factory.next :email
# => "person2@example.com"
FACTORY: USO BÁSICO



      user = Factory(:user)
FACTORY GIRL: USO AVANZADO

# Returns a User instance that's not saved
user = Factory.build(:user)

# Returns a saved User instance
user = Factory.create(:user)

# Returns a hash of attributes that can be used to build a User instance:
attrs = Factory.attributes_for(:user)

# Returns an object with all defined attributes stubbed out:
stub = Factory.stub(:user)

# Same as Factory.create :user:
user = Factory(:user)

# Build a User instance and override the first_name property
user = Factory.build(:user, :first_name => 'Joe')
user.first_name
# => "Joe"
¿PREGUNTAS?

More Related Content

What's hot

Presentación 13 Paso por referencia
Presentación 13 Paso por referenciaPresentación 13 Paso por referencia
Presentación 13 Paso por referenciaAndres Bedoya Tobon
 
For shell script
For    shell scriptFor    shell script
For shell scriptPablo Macon
 
While Shell Script
While  Shell ScriptWhile  Shell Script
While Shell ScriptPablo Macon
 
Primeros Programas Shell Script
Primeros Programas Shell ScriptPrimeros Programas Shell Script
Primeros Programas Shell ScriptPablo Macon
 
Parámetros en shell script
Parámetros en shell scriptParámetros en shell script
Parámetros en shell scriptPablo Macon
 
Estructuras de control 1
Estructuras de control 1Estructuras de control 1
Estructuras de control 1Pablo Macon
 
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
 
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
 
Estructuras de control en php
Estructuras de control en phpEstructuras de control en php
Estructuras de control en phpcristian guevara
 
¿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
 
IntroduccióN A Visual C
IntroduccióN A Visual CIntroduccióN A Visual C
IntroduccióN A Visual Coswchavez
 
Estructuras de control en js
Estructuras de control en jsEstructuras de control en js
Estructuras de control en jsmariazeballos
 

What's hot (20)

Php basico
Php basicoPhp basico
Php basico
 
Documento Margarita
Documento MargaritaDocumento Margarita
Documento Margarita
 
Comandos de Java
Comandos de JavaComandos de Java
Comandos de Java
 
Comandos Java
Comandos JavaComandos Java
Comandos Java
 
Presentación 09 Cajas blanca
Presentación 09 Cajas blancaPresentación 09 Cajas blanca
Presentación 09 Cajas blanca
 
Presentación 13 Paso por referencia
Presentación 13 Paso por referenciaPresentación 13 Paso por referencia
Presentación 13 Paso por referencia
 
For shell script
For    shell scriptFor    shell script
For shell script
 
While Shell Script
While  Shell ScriptWhile  Shell Script
While Shell Script
 
Primeros Programas Shell Script
Primeros Programas Shell ScriptPrimeros Programas Shell Script
Primeros Programas Shell Script
 
Parámetros en shell script
Parámetros en shell scriptParámetros en shell script
Parámetros en shell script
 
Estructuras de control 1
Estructuras de control 1Estructuras de control 1
Estructuras de control 1
 
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
 
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...
 
Estructuras de control en php
Estructuras de control en phpEstructuras de control en php
Estructuras de control en php
 
Entidades
EntidadesEntidades
Entidades
 
¿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
 
Toi Tdd 20080409
Toi Tdd 20080409Toi Tdd 20080409
Toi Tdd 20080409
 
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
 
IntroduccióN A Visual C
IntroduccióN A Visual CIntroduccióN A Visual C
IntroduccióN A Visual C
 
Estructuras de control en js
Estructuras de control en jsEstructuras de control en js
Estructuras de control en js
 

Viewers also liked

Shenjtëri dhe disiplinë (Kisha sipas Dhiatës së Re)
Shenjtëri dhe disiplinë (Kisha sipas Dhiatës së Re)Shenjtëri dhe disiplinë (Kisha sipas Dhiatës së Re)
Shenjtëri dhe disiplinë (Kisha sipas Dhiatës së Re)Asambleja Biblike
 
Overview Shop2market
Overview Shop2marketOverview Shop2market
Overview Shop2marketShop2market
 
UA_PPM Certificate
UA_PPM CertificateUA_PPM Certificate
UA_PPM CertificateCarla Reece
 
La construccion en la mineria
La construccion en la mineriaLa construccion en la mineria
La construccion en la mineriaNicole Ormazabal
 
2014 competition entry_presentation_petopia
2014 competition entry_presentation_petopia2014 competition entry_presentation_petopia
2014 competition entry_presentation_petopiajj1182
 
Augsburg College Leadership Certificate - Jim Lucht
Augsburg College Leadership Certificate - Jim LuchtAugsburg College Leadership Certificate - Jim Lucht
Augsburg College Leadership Certificate - Jim LuchtJim Lucht
 
Presentazione standard di PowerPoint
Presentazione standard di PowerPointPresentazione standard di PowerPoint
Presentazione standard di PowerPointVisualBee.com
 
Stairlift Market In depth Industry Research and Competitive Landscape 2015
Stairlift Market In depth Industry Research and Competitive Landscape 2015Stairlift Market In depth Industry Research and Competitive Landscape 2015
Stairlift Market In depth Industry Research and Competitive Landscape 2015Mark Johns
 
Market Research India - Coaching Classes Market in India 2009
Market Research India - Coaching Classes Market in India 2009Market Research India - Coaching Classes Market in India 2009
Market Research India - Coaching Classes Market in India 2009Netscribes, Inc.
 

Viewers also liked (15)

oi
oioi
oi
 
Shenjtëri dhe disiplinë (Kisha sipas Dhiatës së Re)
Shenjtëri dhe disiplinë (Kisha sipas Dhiatës së Re)Shenjtëri dhe disiplinë (Kisha sipas Dhiatës së Re)
Shenjtëri dhe disiplinë (Kisha sipas Dhiatës së Re)
 
Overview Shop2market
Overview Shop2marketOverview Shop2market
Overview Shop2market
 
UA_PPM Certificate
UA_PPM CertificateUA_PPM Certificate
UA_PPM Certificate
 
La construccion en la mineria
La construccion en la mineriaLa construccion en la mineria
La construccion en la mineria
 
2014 competition entry_presentation_petopia
2014 competition entry_presentation_petopia2014 competition entry_presentation_petopia
2014 competition entry_presentation_petopia
 
HR-Mate Apr2015
HR-Mate Apr2015HR-Mate Apr2015
HR-Mate Apr2015
 
Augsburg College Leadership Certificate - Jim Lucht
Augsburg College Leadership Certificate - Jim LuchtAugsburg College Leadership Certificate - Jim Lucht
Augsburg College Leadership Certificate - Jim Lucht
 
Anbefaling
AnbefalingAnbefaling
Anbefaling
 
20141106125620
2014110612562020141106125620
20141106125620
 
Presentazione standard di PowerPoint
Presentazione standard di PowerPointPresentazione standard di PowerPoint
Presentazione standard di PowerPoint
 
Stairlift Market In depth Industry Research and Competitive Landscape 2015
Stairlift Market In depth Industry Research and Competitive Landscape 2015Stairlift Market In depth Industry Research and Competitive Landscape 2015
Stairlift Market In depth Industry Research and Competitive Landscape 2015
 
Heineken Positioning
Heineken PositioningHeineken Positioning
Heineken Positioning
 
Market Research India - Coaching Classes Market in India 2009
Market Research India - Coaching Classes Market in India 2009Market Research India - Coaching Classes Market in India 2009
Market Research India - Coaching Classes Market in India 2009
 
Pg Lean Maintenance
Pg Lean MaintenancePg Lean Maintenance
Pg Lean Maintenance
 

Similar to Curso TDD Ruby on Rails #04: Factorías de objetos

Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytestHector Canto
 
Seguridad en access
Seguridad en accessSeguridad en access
Seguridad en accessssuser3a82fb
 
Inyecciones sql para todos
Inyecciones sql para todosInyecciones sql para todos
Inyecciones sql para todoscsaralg
 
Manual sgbdoo db4 o en c#
Manual sgbdoo db4 o en c#Manual sgbdoo db4 o en c#
Manual sgbdoo db4 o en c#Irene Lorza
 
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 TDDFernando Perez
 
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
 
Manual script usuarios masivos
Manual script usuarios masivosManual script usuarios masivos
Manual script usuarios masivosYimy Pérez Medina
 
Construccion a través de compontes
Construccion a través de compontesConstruccion a través de compontes
Construccion a través de compontesjalzate
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++ Ronal Palomino
 
Configuración Script Usuarios Masivos Windows Server 2012 R2
Configuración Script Usuarios Masivos Windows Server 2012 R2Configuración Script Usuarios Masivos Windows Server 2012 R2
Configuración Script Usuarios Masivos Windows Server 2012 R2cyberleon95
 
Constructores en Java
Constructores en JavaConstructores en Java
Constructores en JavaAlelt2890
 

Similar to Curso TDD Ruby on Rails #04: Factorías de objetos (20)

Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytest
 
Seguridad en access
Seguridad en accessSeguridad en access
Seguridad en access
 
Fabric más allá de lo básico
Fabric más allá de lo básicoFabric más allá de lo básico
Fabric más allá de lo básico
 
Inyecciones sql para todos
Inyecciones sql para todosInyecciones sql para todos
Inyecciones sql para todos
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
Manual sgbdoo db4 o en c#
Manual sgbdoo db4 o en c#Manual sgbdoo db4 o en c#
Manual sgbdoo db4 o en c#
 
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
 
Introducción a DJango
Introducción a DJangoIntroducción a DJango
Introducción a DJango
 
Operadores poo
Operadores pooOperadores poo
Operadores poo
 
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
 
Javascript OOP
Javascript OOPJavascript OOP
Javascript OOP
 
Introducción a Flask
Introducción a FlaskIntroducción a Flask
Introducción a Flask
 
Clase 21 programacion ejb 3.0
Clase 21 programacion ejb 3.0Clase 21 programacion ejb 3.0
Clase 21 programacion ejb 3.0
 
Modelo Persistente
Modelo PersistenteModelo Persistente
Modelo Persistente
 
Test unitarios
Test unitariosTest unitarios
Test unitarios
 
Manual script usuarios masivos
Manual script usuarios masivosManual script usuarios masivos
Manual script usuarios masivos
 
Construccion a través de compontes
Construccion a través de compontesConstruccion a través de compontes
Construccion a través de compontes
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
 
Configuración Script Usuarios Masivos Windows Server 2012 R2
Configuración Script Usuarios Masivos Windows Server 2012 R2Configuración Script Usuarios Masivos Windows Server 2012 R2
Configuración Script Usuarios Masivos Windows Server 2012 R2
 
Constructores en Java
Constructores en JavaConstructores en Java
Constructores en Java
 

More from 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 #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
 
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
 

More from Alberto Perdomo (10)

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 #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
 
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/...
 

Recently uploaded

De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxdoloresolmosantiago
 
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiCVelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC6dwwcgtpfx
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosYOMIRAVILLARREAL1
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónAntonia Yamilet Perez Palomares
 
Electricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxElectricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxCsarNlsonMrquezContr
 
herramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaherramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaJadeVilcscordova
 
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.pptx221112876
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.241534381
 
Introduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptxIntroduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptxcj12paz
 
innovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 bloginnovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 blogManuel Diaz
 
Imágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónImágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónUniversidad de Sonora
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).jcaballerosamayoa
 
editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docxssusere34b451
 
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfRedes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfJosAndrRosarioVzquez
 
avancestecnologicossigloveintiunoprofetengohambreayuda
avancestecnologicossigloveintiunoprofetengohambreayudaavancestecnologicossigloveintiunoprofetengohambreayuda
avancestecnologicossigloveintiunoprofetengohambreayudadocente
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaEdwinGarca59
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...dramosbrise1403
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxJOELGARCIA849853
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .itzyrivera61103
 
Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024NicolleAndrade7
 

Recently uploaded (20)

De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptx
 
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiCVelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de Datos
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
 
Electricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxElectricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docx
 
herramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaherramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el tema
 
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
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.
 
Introduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptxIntroduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptx
 
innovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 bloginnovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 blog
 
Imágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónImágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la información
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).
 
editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docx
 
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfRedes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
 
avancestecnologicossigloveintiunoprofetengohambreayuda
avancestecnologicossigloveintiunoprofetengohambreayudaavancestecnologicossigloveintiunoprofetengohambreayuda
avancestecnologicossigloveintiunoprofetengohambreayuda
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación Latinoamerica
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .
 
Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024
 

Curso TDD Ruby on Rails #04: Factorías de objetos

  • 1. CURSO DE TESTING OSL 12 – 16 DE ABRIL 2010 Factorías de objetos Alberto Perdomo Web: http://albertoperdomo.net Email: alberto.perdomo@aentos.es Twitter: @albertoperdomo http://www.aentos.com
  • 2. PROBLEMAS DE LOS FIXTURES: DATOS ESPECÍFICOS → A veces hacen falta datos específcos para ciertas pruebas pero están disponibles para todos los tests. → Ejemplo: Hemos implementado la gestión de cobros y para probar los casos extremos necesitamos una instancia de usuario sin saldo sufciente.
  • 3. PROBLEMAS DE LOS FIXTURES: MANTENIBILIDAD → incómodos → difíciles de mantener → a menudo las relaciones acaban “rotas”.
  • 4. PROBLEMA RESUELTO: FACTORÍAS DE OBJETOS → compatibles con los fxtures → usa lo que más te guste o lo que mejor se adapte a la situación → ¡extremadamente fexibles!
  • 5. VARIAS ALTERNATIVAS Factory Girl → http://github.com/thoughtbot/factory_girl Machinist → http://github.com/notahat/machinist Object daddy → http://github.com/fogic/object_daddy Fixture Replacement → http://github.com/smtlaissezfaire/fxturereplacement y otras...
  • 6. FACTORY GIRL: DEFINICIÓN Se suelen defnir → todas dentro del mismo fchero → test/factories.rb → o en fcheros separados test/factories/user.rb etc. # This will guess the User class Factory.define :user do |u| test/factories.rb u.first_name 'John' spec/factories.rb u.last_name 'Doe' test/factories/*.rb u.admin false end spec/factories/*.rb
  • 7. FACTORY GIRL: AVANZADO Lazy attributes Factory.define :user do |u| # ... u.activation_code { User.generate_activation_code } end Dependent Attributes Factory.define :user do |u| u.first_name 'Joe' u.last_name 'Blow' u.email {|a| "#{a.first_name}.#{a.last_name}@example.com".downcase } end Factory(:user, :last_name => 'Doe').email # => "joe.doe@example.com"
  • 8. FACTORY GIRL: AVANZADO Asociaciones Factory.define :post do |p| # ... p.author {|author| author.association(:user, :last_name => 'Writely') } end Secuencias # Defines a new sequence Ejemplo: uso de sequence para el Factory.sequence :email do |n| email dentro de la factoría de usuarios "person#{n}@example.com" end Factory.define :user do |f| Factory.next :email f.email { Factory.next(:email) } # => "person1@example.com" end Factory.next :email # => "person2@example.com"
  • 9. FACTORY: USO BÁSICO user = Factory(:user)
  • 10. FACTORY GIRL: USO AVANZADO # Returns a User instance that's not saved user = Factory.build(:user) # Returns a saved User instance user = Factory.create(:user) # Returns a hash of attributes that can be used to build a User instance: attrs = Factory.attributes_for(:user) # Returns an object with all defined attributes stubbed out: stub = Factory.stub(:user) # Same as Factory.create :user: user = Factory(:user) # Build a User instance and override the first_name property user = Factory.build(:user, :first_name => 'Joe') user.first_name # => "Joe"