SlideShare una empresa de Scribd logo
TOI  Test-Driven Development (TDD) Autores [email_address] INICIATIVA PRUEBAS DE CALIDAD Alcobendas, 09/04/2008
Resumen del TOI “ SÓLO ESCRIBIR CÓDIGO PARA ARREGLAR UN TEST QUE FALLA”
GRACIAS
Es un proceso 3 : REFACTOR 2 : ESCRIBIR CÓDIGO 1 : ESCRIBIR UN TEST
Pros y cons de usar TDD HAY QUE CONTAR CON EL ESFUERZO EXTRA DE HACER Y MANTENER LOS TESTS SE REDUCE EL COSTE PORQUE SE REDUCEN LOS ERRORES SE DEFINEN LOS REQUISITOS  (NO SE QUEDAN OLVIDADOS EN UN DOCUMENTO) SE MANTIENEN LOS REQUISITOS  (CADA VEZ QUE SE CAMBIA UN REQUISITO HAY QUE CAMBIAR O AÑADIR AL MENOS UN TEST)
¿Realmente es más esfuerzo? http://blog.objectmentor.com/articles/2007/09/30/why-you-have-time-for-tdd-but-may-not-know-it-yet   Evolución ideal del proyecto Evolución REAL del proyecto Evolución del proyecto haciendo TDD + IC
Buena práctica “ TDD incluye pruebas unitarias y funcionales automatizadas. Ambas se escriben ANTES que el código que especifican. Las pruebas unitarias se escriben segundos antes, y las pruebas de acpetación horas o incluso días antes. Es posible ganar lo mismo haciendo las pruebas DESPUÉS. Sin embargo, es mucho más difícil. Las pruebas que se escriben ANTES no están tan influidas por la implementación. Las pruebas de aceptación ANTES de implementar son especificaciones de lo que debería ser.  Las pruebas de aceptación DESPUÉS de implementar son frecuentemente especificaciones de lo que es.” http://blog.objectmentor.com/articles/2007/09/30/why-you-have-time-for-tdd-but-may-not-know-it-yet
Buena práctica http://homepage.mac.com/keithray/blog/2006/11/19#JanesRuleDishWasher
La  CALIDAD  es el resultado de acciones concretas: Meticulosidad, procedimientos, metodología... Pruebas, pruebas y más pruebas Profesionalidad Buscamos la calidad  porque : El cliente está satisfecho (y  un cliente satisfecho es un cliente fiel ) Reducimos costes  de mantenimiento (el coste de un error después de la entrega puede ser del orden de 30 veces más que de resolverlo durante el desarrollo o 100 veces más que de resolverlo durante el análisis). Arreglar defectos de otro “no es divertido” CALIDAD
Calidad LA CALIDAD ES  GRATIS PERO TIENE UN COSTE
Acceptance TDD Acceptance Test-Driven User Story DEFINITION OF DONE
¿Qué tiene que ver con IC? Un proceso de Integración Continua consiste en compilar todo el código y ejecutar los tests. Si  escribimos los tests antes que el código , siempre tendremos un test para cada funcionalidad desarrollada. (No debemos olvidar este principio). Por cierto, sólo debemos subir código  "hecho-hecho" .
LAB-1 : TestFirstChallenge EJEMPLO PARA INTRODUCIR TDD PRUEBA DE JUNIORS EN DEGESYS
LAB-1 : TestFirstChallenge ES FÁCIL PORQUE NOS DAN LOS TESTS: LO VERDADERAMENTE DIFÍCIL ES DISEÑAR LOS TESTS LAB-2 http://www.xp123.com/xplor/xp0201/index.shtml http://wiki/index.php/TestFirstChallenge
LAB-2 : MoneyExample TOMADO DEL LIBRO DE KENT BECK MULTIMONEDA
LAB-2 : MoneyExample REQUISITOS: Si el cambio es 2:1, 5$ + 10€ = 10$ 5$ * 2 = 10$
LAB-2 (testMultiplication) @Test public   void  testMultiplication() { Dollar  five =  new  Dollar(5); assertEquals ( new  Dollar(10), five.times(2)); } 5$ * 2 = 10$ Inicialmente no compila, entonces creamos la clase  Dollar Necesitamos un constructor con parámetro  int Necesitamos un método  public Dollar times ( int times ); Necesitamos implementar  equals
LAB-2 (testEquality) @Test public   void  testMultiplication() { Dollar  five =  new  Dollar(5); assertEquals ( new  Dollar(10), five.times(2)); } @Test public   void  testEquality() { assertTrue ( new  Dollar(5).equals( new  Dollar(5))); assertFalse ( new  Dollar(5).equals( new  Dollar(6))); } 5$ * 2 = 10$ Podíamos implementar  equals  devolviendo  true
LAB-2 (testMultiplication) @Test public   void  testMultiplication() { Dollar  five =  new  Dollar(5); assertEquals ( new  Dollar(10), five.times(2)); assertEquals ( new  Dollar(15), five.times(3)); } 5$ * 2 = 10$ Triangulación: podíamos pasar el test devolviendo  new Dollar(10)
LAB-2 (testEuroMultiplication) @Test public   void  testEuroMultiplication() { Euro  five =  new  Euro(5); assertEquals ( new  Euro(10), five.times(2)); assertEquals ( new  Euro(15), five.times(3)); } 5 €  * 2 = 10 € Añadimos también  asserts  en  testEquality  por simetría (y porque podríamos hacer trampa)
LAB-2 (testEuroMultiplication) assertFalse ( new  Euro(5).equals(new Dollar(5))); 5 €  * 2 = 10 € Podemos refactorizar ahora... o no, pero no nos quedará más remedio cuando añadamos el siguiente assert:
LAB-2 (testSimpleAdditionSameCurrency) @Test public   void  testSimpleAdditionSameCurrency() { Money sumOfDollars =  new  Dollar(5).plus( new  Dollar(5)); assertEquals ( new  Dollar(10), sumOfDollars); } Triangulación: esto es un ejemplo, pero es una buena práctica añadir tests para evitar a los “tahures”. Podemos implementar el método  plus()  en la clase abstracta,  pero sería una mala práctica (habríamos desarrollado código sin un  requisito que lo respalde, lo que se demuestra cuando añadimos un  test y sigue en  verde ) 5$ + 5$ = 10$
LAB-2 (testBankExchangeRate) @Test public   void  testBankExchangeRate() { Bank bank =  new  Bank(); bank.addRate(Euro. class ,Dollar. class , new  Double(2)); assertEquals ( new  Double(2), bank.getRate(Euro. class ,Dollar. class )); bank.addRate(Euro. class ,Dollar. class , new  Double(3)); assertEquals ( new  Double(3), bank.getRate(Euro. class ,Dollar. class )); } Necesitamos un colaborador: podemos implementarlo o usar un doble. Si el cambio es 2:1 , 5$ + 10€ = 10$
LAB-2 (testBankExchangeRate) @Test public   void  testBankExchangeEurosToDollars() { Bank bank =  new  Bank(); bank.addRate(Euro. class ,Dollar. class , new  Double(2)); Money result = bank.exchange( new  Euro(10), Dollar. class ); assertEquals ( new  Dollar(5), result); } Implementar  Bank.exchange  implica implementar  Money.createInstance Y EL TEST DE  Money.createInstance Si el cambio es 2:1 , 5$ + 10€ = 10$
LAB-2 (testSimpleAdditionDifferentCurrency) @Test public   void  testSimpleAdditionDifferentCurrency() { Bank bank =  new  Bank(); bank.addRate(Euro. class ,Dollar. class , new  Double(2)); Money result = bank.exchange( new  Euro(10), Dollar. class ). plus( new  Dollar(5)); assertEquals ( new  Dollar(10), result); bank.addRate(Dollar. class ,Euro. class , new  Double(0.5)); result = bank.exchange( new  Dollar(5), Euro. class ). plus( new  Euro(3)); assertEquals ( new  Euro(13), result); } Hay que llevar  plus(Dollar)  y  plus(Euro)  a la clase  Money  y luego podremos hacer refactor  [Lo dejo como ejercicio] Si el cambio es 2:1,  5$ + 10€ = 10$
Conceptos (I) FIXTURE COLABORADORES
Conceptos (II) DOBLES DE PRUEBAS PROBAR EL ESTADO vs PROBAR LAS INTERACCIONES http://fry/dokeos/courses/TOIIPC003   http://flexo/svnRepo/TOI/TOI-DoblesPrueba
Temas relacionados ¿Cómo diseñar pensando en las pruebas? Patrones de pruebas ¿Cómo hacer TDD con código ya existente?
TDD en diferentes entornos Web TOI “Mocks en JSF” TOI “Selenium” Persistencia TOI “Pruebas de persistencia” Negocio TOI “Pruebas FIT” Aunque los TOIs no se centren en TDD: no olvidemos por qué “los tests primero”
Bibliografía recomendada
Enlaces http://www.theserverside.com/tt/articles/article.tss?l=JMockTestDrivenDev   http://www.jmock.org/oopsla2004.pdf   http://www.theserverside.com/tt/articles/article.tss?l=DesigntoUnitTest http://www.ibm.com/developerworks/webservices/library/co-single.html http://www.testearly.com/ http://www.mockobjects.com/ http://www.mockobjects.com/labels/listening%20to%20the%20tests.html
GRACIAS

Más contenido relacionado

PDF
Curso TDD Ruby on Rails #01: Introducción al testing
PDF
Curso TDD Ruby on Rails #03: Tests unitarios
PPT
7090112 Clase Transact Sql Server
PDF
Estructuras de Control C++
PDF
Property Based Testing usando QuickCheck
PDF
Curso TDD Ruby on Rails #02: Test Driven Development
PDF
Curso TDD Ruby on Rails #04: Factorías de objetos
Curso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #03: Tests unitarios
7090112 Clase Transact Sql Server
Estructuras de Control C++
Property Based Testing usando QuickCheck
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #04: Factorías de objetos

Similar a Toi Tdd 20080409 (20)

PDF
Cesnavarra 2009-boletín 1
PPT
Seminario de Test Development Driven
PPTX
TDD Workshop
PPTX
Introducción a Unit Testing y TDD
PDF
Como escribir buenos tests al hacer TDD
PPT
Junit y Jmock
PDF
Qunit CookBook español
PPTX
Artalde Tdd intro
PPTX
Introducción a tdd
DOCX
TEMA Nº 7: SENTENCIAS DE CONTROL DE FLUJO EN JAVA II
PPT
Test unitarios
PDF
Pruebas Unitarias1.pdf
DOCX
Pruebas de aceptación 15 11_2013
PPTX
Unidad ii. tdd
PDF
Tema 9 pruebas unitarias por gio
PDF
DeSymfonyDay 2014 - To mock or not to mock - Spanish
PDF
DeSymfonyDay 2014 - To mock or not to mock - Spanish
PDF
DeSymfonyDay 2014 - To mock or not to mock - Spanish
PPT
7.1. procedimientos almacenados
PDF
Ciclos Java - NetsBeans - Algoritmia
Cesnavarra 2009-boletín 1
Seminario de Test Development Driven
TDD Workshop
Introducción a Unit Testing y TDD
Como escribir buenos tests al hacer TDD
Junit y Jmock
Qunit CookBook español
Artalde Tdd intro
Introducción a tdd
TEMA Nº 7: SENTENCIAS DE CONTROL DE FLUJO EN JAVA II
Test unitarios
Pruebas Unitarias1.pdf
Pruebas de aceptación 15 11_2013
Unidad ii. tdd
Tema 9 pruebas unitarias por gio
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
7.1. procedimientos almacenados
Ciclos Java - NetsBeans - Algoritmia
Publicidad

Más de Jose Manuel Beas (20)

PDF
Introducción a los mapas de Wardley (para describir nuestro entorno competitivo)
PDF
User Story Mapping [webinar DoneTonic, Dic - 2023]
PDF
Valor y Tipos de Desperdicio [Dic - 2023]
PDF
Introducción a Flow Efficiency [Dic 2023]
PDF
Cómo tratar defectos con Kanban [Nov 2023]
PDF
Introducción a Team Topologies [Oct 2023]
PDF
Priorización de Portfolio para Agility360
PPTX
Webinar “Repensemos la forma en la que trabajamos; empecemos simplificando”
PDF
Internal keynote - La era del agilismo (curated version)
PDF
Transformar por niveles
PDF
CAS2018 - El poder de las metaforas
PPTX
Los estados intermedios
PDF
How to implement agile in a waterfall company
PDF
Taller exprés planificación ágil
PDF
Scaling Agile without frameworks
PDF
Gestión de riesgos en proyectos ágiles
PDF
Codemotion 2014 - Desarrollo Agil de Producto para Emprendedores
PDF
Startups Mansion - Desarrollo Agil de Producto para Emprendedores
PDF
Betabeers Huelva - Agilismo y Lean Startup
PDF
DrupalCamp14 Agile product development for startups
Introducción a los mapas de Wardley (para describir nuestro entorno competitivo)
User Story Mapping [webinar DoneTonic, Dic - 2023]
Valor y Tipos de Desperdicio [Dic - 2023]
Introducción a Flow Efficiency [Dic 2023]
Cómo tratar defectos con Kanban [Nov 2023]
Introducción a Team Topologies [Oct 2023]
Priorización de Portfolio para Agility360
Webinar “Repensemos la forma en la que trabajamos; empecemos simplificando”
Internal keynote - La era del agilismo (curated version)
Transformar por niveles
CAS2018 - El poder de las metaforas
Los estados intermedios
How to implement agile in a waterfall company
Taller exprés planificación ágil
Scaling Agile without frameworks
Gestión de riesgos en proyectos ágiles
Codemotion 2014 - Desarrollo Agil de Producto para Emprendedores
Startups Mansion - Desarrollo Agil de Producto para Emprendedores
Betabeers Huelva - Agilismo y Lean Startup
DrupalCamp14 Agile product development for startups
Publicidad

Último (20)

PDF
TRABAJO DE TECNOLOGIA.pdf...........................
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPTX
Curso de generación de energía mediante sistemas solares
PPTX
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PDF
Documental Beyond the Code (Dossier Presentación - 2.0)
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
PPTX
El uso de las TIC en la vida cotidiana..
DOCX
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
MANUAL de recursos humanos para ODOO.pdf
PDF
capacitación de aire acondicionado Bgh r 410
PDF
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
Estrategia de Apoyo de Daylin Castaño (5).pdf
PPTX
Mecanismos-de-Propagacion de ondas electromagneticas
PDF
informe_fichas1y2_corregido.docx (2) (1).pdf
DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
PPTX
Propuesta BKP servidores con Acronis1.pptx
TRABAJO DE TECNOLOGIA.pdf...........................
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
Curso de generación de energía mediante sistemas solares
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
Documental Beyond the Code (Dossier Presentación - 2.0)
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
El uso de las TIC en la vida cotidiana..
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
MANUAL de recursos humanos para ODOO.pdf
capacitación de aire acondicionado Bgh r 410
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
Sesion 1 de microsoft power point - Clase 1
Estrategia de Apoyo de Daylin Castaño (5).pdf
Mecanismos-de-Propagacion de ondas electromagneticas
informe_fichas1y2_corregido.docx (2) (1).pdf
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
Propuesta BKP servidores con Acronis1.pptx

Toi Tdd 20080409

  • 1. TOI Test-Driven Development (TDD) Autores [email_address] INICIATIVA PRUEBAS DE CALIDAD Alcobendas, 09/04/2008
  • 2. Resumen del TOI “ SÓLO ESCRIBIR CÓDIGO PARA ARREGLAR UN TEST QUE FALLA”
  • 4. Es un proceso 3 : REFACTOR 2 : ESCRIBIR CÓDIGO 1 : ESCRIBIR UN TEST
  • 5. Pros y cons de usar TDD HAY QUE CONTAR CON EL ESFUERZO EXTRA DE HACER Y MANTENER LOS TESTS SE REDUCE EL COSTE PORQUE SE REDUCEN LOS ERRORES SE DEFINEN LOS REQUISITOS (NO SE QUEDAN OLVIDADOS EN UN DOCUMENTO) SE MANTIENEN LOS REQUISITOS (CADA VEZ QUE SE CAMBIA UN REQUISITO HAY QUE CAMBIAR O AÑADIR AL MENOS UN TEST)
  • 6. ¿Realmente es más esfuerzo? http://blog.objectmentor.com/articles/2007/09/30/why-you-have-time-for-tdd-but-may-not-know-it-yet Evolución ideal del proyecto Evolución REAL del proyecto Evolución del proyecto haciendo TDD + IC
  • 7. Buena práctica “ TDD incluye pruebas unitarias y funcionales automatizadas. Ambas se escriben ANTES que el código que especifican. Las pruebas unitarias se escriben segundos antes, y las pruebas de acpetación horas o incluso días antes. Es posible ganar lo mismo haciendo las pruebas DESPUÉS. Sin embargo, es mucho más difícil. Las pruebas que se escriben ANTES no están tan influidas por la implementación. Las pruebas de aceptación ANTES de implementar son especificaciones de lo que debería ser. Las pruebas de aceptación DESPUÉS de implementar son frecuentemente especificaciones de lo que es.” http://blog.objectmentor.com/articles/2007/09/30/why-you-have-time-for-tdd-but-may-not-know-it-yet
  • 9. La CALIDAD es el resultado de acciones concretas: Meticulosidad, procedimientos, metodología... Pruebas, pruebas y más pruebas Profesionalidad Buscamos la calidad porque : El cliente está satisfecho (y un cliente satisfecho es un cliente fiel ) Reducimos costes de mantenimiento (el coste de un error después de la entrega puede ser del orden de 30 veces más que de resolverlo durante el desarrollo o 100 veces más que de resolverlo durante el análisis). Arreglar defectos de otro “no es divertido” CALIDAD
  • 10. Calidad LA CALIDAD ES GRATIS PERO TIENE UN COSTE
  • 11. Acceptance TDD Acceptance Test-Driven User Story DEFINITION OF DONE
  • 12. ¿Qué tiene que ver con IC? Un proceso de Integración Continua consiste en compilar todo el código y ejecutar los tests. Si escribimos los tests antes que el código , siempre tendremos un test para cada funcionalidad desarrollada. (No debemos olvidar este principio). Por cierto, sólo debemos subir código "hecho-hecho" .
  • 13. LAB-1 : TestFirstChallenge EJEMPLO PARA INTRODUCIR TDD PRUEBA DE JUNIORS EN DEGESYS
  • 14. LAB-1 : TestFirstChallenge ES FÁCIL PORQUE NOS DAN LOS TESTS: LO VERDADERAMENTE DIFÍCIL ES DISEÑAR LOS TESTS LAB-2 http://www.xp123.com/xplor/xp0201/index.shtml http://wiki/index.php/TestFirstChallenge
  • 15. LAB-2 : MoneyExample TOMADO DEL LIBRO DE KENT BECK MULTIMONEDA
  • 16. LAB-2 : MoneyExample REQUISITOS: Si el cambio es 2:1, 5$ + 10€ = 10$ 5$ * 2 = 10$
  • 17. LAB-2 (testMultiplication) @Test public void testMultiplication() { Dollar five = new Dollar(5); assertEquals ( new Dollar(10), five.times(2)); } 5$ * 2 = 10$ Inicialmente no compila, entonces creamos la clase Dollar Necesitamos un constructor con parámetro int Necesitamos un método public Dollar times ( int times ); Necesitamos implementar equals
  • 18. LAB-2 (testEquality) @Test public void testMultiplication() { Dollar five = new Dollar(5); assertEquals ( new Dollar(10), five.times(2)); } @Test public void testEquality() { assertTrue ( new Dollar(5).equals( new Dollar(5))); assertFalse ( new Dollar(5).equals( new Dollar(6))); } 5$ * 2 = 10$ Podíamos implementar equals devolviendo true
  • 19. LAB-2 (testMultiplication) @Test public void testMultiplication() { Dollar five = new Dollar(5); assertEquals ( new Dollar(10), five.times(2)); assertEquals ( new Dollar(15), five.times(3)); } 5$ * 2 = 10$ Triangulación: podíamos pasar el test devolviendo new Dollar(10)
  • 20. LAB-2 (testEuroMultiplication) @Test public void testEuroMultiplication() { Euro five = new Euro(5); assertEquals ( new Euro(10), five.times(2)); assertEquals ( new Euro(15), five.times(3)); } 5 € * 2 = 10 € Añadimos también asserts en testEquality por simetría (y porque podríamos hacer trampa)
  • 21. LAB-2 (testEuroMultiplication) assertFalse ( new Euro(5).equals(new Dollar(5))); 5 € * 2 = 10 € Podemos refactorizar ahora... o no, pero no nos quedará más remedio cuando añadamos el siguiente assert:
  • 22. LAB-2 (testSimpleAdditionSameCurrency) @Test public void testSimpleAdditionSameCurrency() { Money sumOfDollars = new Dollar(5).plus( new Dollar(5)); assertEquals ( new Dollar(10), sumOfDollars); } Triangulación: esto es un ejemplo, pero es una buena práctica añadir tests para evitar a los “tahures”. Podemos implementar el método plus() en la clase abstracta, pero sería una mala práctica (habríamos desarrollado código sin un requisito que lo respalde, lo que se demuestra cuando añadimos un test y sigue en verde ) 5$ + 5$ = 10$
  • 23. LAB-2 (testBankExchangeRate) @Test public void testBankExchangeRate() { Bank bank = new Bank(); bank.addRate(Euro. class ,Dollar. class , new Double(2)); assertEquals ( new Double(2), bank.getRate(Euro. class ,Dollar. class )); bank.addRate(Euro. class ,Dollar. class , new Double(3)); assertEquals ( new Double(3), bank.getRate(Euro. class ,Dollar. class )); } Necesitamos un colaborador: podemos implementarlo o usar un doble. Si el cambio es 2:1 , 5$ + 10€ = 10$
  • 24. LAB-2 (testBankExchangeRate) @Test public void testBankExchangeEurosToDollars() { Bank bank = new Bank(); bank.addRate(Euro. class ,Dollar. class , new Double(2)); Money result = bank.exchange( new Euro(10), Dollar. class ); assertEquals ( new Dollar(5), result); } Implementar Bank.exchange implica implementar Money.createInstance Y EL TEST DE Money.createInstance Si el cambio es 2:1 , 5$ + 10€ = 10$
  • 25. LAB-2 (testSimpleAdditionDifferentCurrency) @Test public void testSimpleAdditionDifferentCurrency() { Bank bank = new Bank(); bank.addRate(Euro. class ,Dollar. class , new Double(2)); Money result = bank.exchange( new Euro(10), Dollar. class ). plus( new Dollar(5)); assertEquals ( new Dollar(10), result); bank.addRate(Dollar. class ,Euro. class , new Double(0.5)); result = bank.exchange( new Dollar(5), Euro. class ). plus( new Euro(3)); assertEquals ( new Euro(13), result); } Hay que llevar plus(Dollar) y plus(Euro) a la clase Money y luego podremos hacer refactor [Lo dejo como ejercicio] Si el cambio es 2:1, 5$ + 10€ = 10$
  • 26. Conceptos (I) FIXTURE COLABORADORES
  • 27. Conceptos (II) DOBLES DE PRUEBAS PROBAR EL ESTADO vs PROBAR LAS INTERACCIONES http://fry/dokeos/courses/TOIIPC003 http://flexo/svnRepo/TOI/TOI-DoblesPrueba
  • 28. Temas relacionados ¿Cómo diseñar pensando en las pruebas? Patrones de pruebas ¿Cómo hacer TDD con código ya existente?
  • 29. TDD en diferentes entornos Web TOI “Mocks en JSF” TOI “Selenium” Persistencia TOI “Pruebas de persistencia” Negocio TOI “Pruebas FIT” Aunque los TOIs no se centren en TDD: no olvidemos por qué “los tests primero”
  • 31. Enlaces http://www.theserverside.com/tt/articles/article.tss?l=JMockTestDrivenDev http://www.jmock.org/oopsla2004.pdf http://www.theserverside.com/tt/articles/article.tss?l=DesigntoUnitTest http://www.ibm.com/developerworks/webservices/library/co-single.html http://www.testearly.com/ http://www.mockobjects.com/ http://www.mockobjects.com/labels/listening%20to%20the%20tests.html