SlideShare una empresa de Scribd logo
1 de 36
Unit tesing
Y el mito de los 0 bugs
Fernando Escolar
@fernandoescolar
fernando.escolar@tokiota.com

www.programandonet.com
Indice
• Definicion de unit test
• Estructura de un unit test

• Haciendo codigo testeable
• Ventajas e inconvenientes
• Frameworks
Que es una prueba de
software
Input

Process

Output
Que es una prueba de
software
Input

Process

Output
Clasificación de las
pruebas
White-Box testing
Black-box testing
Visual testing
Grey-box testing
Clasificación de las
pruebas
White-Box testing
Black-box testing
Visual testing
Grey-box testing

Unit testing
Integration testing
System testing
Acceptance testing
Clasificación de las
pruebas
White-Box testing
Black-box testing
Visual testing
Grey-box testing

Unit testing
Integration testing
System testing
Acceptance testing

Installation testing
Compatibility testing
Smoke and sanity testing
Regression testing
Acceptance testing
Alpha testing
Beta testing
Functional vs non-functional
testing
Destructive testing
Software performance testing
Usability testing
Accessibility testing
Security testing
Internationalization and
localization
Development testing
A/B testing
Prueba unitaria
Pruebas unitarias
A unit test is a piece of a code (usually a
method) that invokes another piece of
code and checks the correctness of some
assumptions afterward. If the
assumptions turn out to be wrong, the
unit test has failed.

A “unit” is a method or function.
Unit test definition – The art of unit testing
Roy Osherove – Manning Publications co.
Caracteristicas: FIRST
• Fast
• Isolated
• Repeatable
• Self-validating
• Timely
Caracteristicas: SECOND
• Profesional
• Unitario
• Automatizable
• No usa recursos
Estructura: Triple Cuadruple A
• Assume
• Arrange
• Act
• Assert
Codigo
Si un metodo o funcion es una unidad
tengo que desglosarlos al maximo

vs.
¿Puedo escribir mejores unit
tests?
Puedes escribir mejor codigo
Desacoplar artefactos
Patrones
• Inversion of Control
• Abstract Factory
Test doubles
Test doubles
• Dummies
• Fakes
• Stubs
• Spies
• Mocks
xUnit Test Patterns
Gerrard Meszaros – Hardcover
jMock
JSmockito
Evitar uso de estaticos o
singletons
Simplifica los constructores
• No uses `new`
• No asignes algo que no sean atributos
• No uses `Initializer`
• No uses condicionales o bucles
Test positivo y negativo
Ventajas de unit testing
• Encontrar bugs pronto
• Red de seguridad
• Documentacion
• Mejor diseno
Limitaciones de unit testing
• No detectan problemas de:
Integracion, performance, …
• No todo puede ser testeado
con facilidad
Multi-threading,
algoritmos no
deterministas
Tecnicas
• TDD
• ATDD
• BDD
Metricas de codigo
• Code Coverage
• Cyclomatic Complexity
Ruegos y preguntas
Muchas gracias!!
@fernandoescolar
fernando.escolar@tokiota.com
www.programandonet.com

Más contenido relacionado

Destacado

Paper5 jefri linking to multiple java script files
Paper5 jefri linking to multiple java script filesPaper5 jefri linking to multiple java script files
Paper5 jefri linking to multiple java script filesJefri Fahrian
 
New Developments and Legal Decisions in Employment Law 2015
New Developments and Legal Decisions in Employment Law 2015New Developments and Legal Decisions in Employment Law 2015
New Developments and Legal Decisions in Employment Law 2015Parsons Behle & Latimer
 
Hotel gianna parco card
Hotel gianna parco cardHotel gianna parco card
Hotel gianna parco cardHotel Gianna
 
Rethinking Company Resources
Rethinking Company ResourcesRethinking Company Resources
Rethinking Company ResourcesProfiles Asia
 
EN3604 Week 4: Poetry of Revolution and Resolution
EN3604 Week 4: Poetry of Revolution and ResolutionEN3604 Week 4: Poetry of Revolution and Resolution
EN3604 Week 4: Poetry of Revolution and ResolutionClaire Lynch
 
ビッグデータ解析
ビッグデータ解析ビッグデータ解析
ビッグデータ解析健太 田上
 
Microsoft word mengurus perubahan
Microsoft word   mengurus perubahanMicrosoft word   mengurus perubahan
Microsoft word mengurus perubahanFaizzah Izam
 
Broken hot sauce bottle attacker
Broken hot sauce bottle attackerBroken hot sauce bottle attacker
Broken hot sauce bottle attackerAmirah Morss
 
IDOWU ADEBAYO CV (2)
IDOWU ADEBAYO CV (2)IDOWU ADEBAYO CV (2)
IDOWU ADEBAYO CV (2)Bayo Idowu
 
Robust Repositioning in Large-scale Networks
Robust Repositioning in Large-scale NetworksRobust Repositioning in Large-scale Networks
Robust Repositioning in Large-scale NetworksAlan Erera
 
Praktikum jaringan komputer 3 http server
Praktikum jaringan komputer 3 http serverPraktikum jaringan komputer 3 http server
Praktikum jaringan komputer 3 http serverJefri Fahrian
 

Destacado (19)

Paper5 jefri linking to multiple java script files
Paper5 jefri linking to multiple java script filesPaper5 jefri linking to multiple java script files
Paper5 jefri linking to multiple java script files
 
New Developments and Legal Decisions in Employment Law 2015
New Developments and Legal Decisions in Employment Law 2015New Developments and Legal Decisions in Employment Law 2015
New Developments and Legal Decisions in Employment Law 2015
 
Start
StartStart
Start
 
Hotel gianna parco card
Hotel gianna parco cardHotel gianna parco card
Hotel gianna parco card
 
Rethinking Company Resources
Rethinking Company ResourcesRethinking Company Resources
Rethinking Company Resources
 
EN3604 Week 4: Poetry of Revolution and Resolution
EN3604 Week 4: Poetry of Revolution and ResolutionEN3604 Week 4: Poetry of Revolution and Resolution
EN3604 Week 4: Poetry of Revolution and Resolution
 
Art of Hosting Plus
Art of Hosting PlusArt of Hosting Plus
Art of Hosting Plus
 
Tarjeta madre
Tarjeta madreTarjeta madre
Tarjeta madre
 
August2012
August2012August2012
August2012
 
ビッグデータ解析
ビッグデータ解析ビッグデータ解析
ビッグデータ解析
 
Sa
SaSa
Sa
 
accounting for Oil&gas production
accounting for Oil&gas productionaccounting for Oil&gas production
accounting for Oil&gas production
 
Microsoft word mengurus perubahan
Microsoft word   mengurus perubahanMicrosoft word   mengurus perubahan
Microsoft word mengurus perubahan
 
Broken hot sauce bottle attacker
Broken hot sauce bottle attackerBroken hot sauce bottle attacker
Broken hot sauce bottle attacker
 
IDOWU ADEBAYO CV (2)
IDOWU ADEBAYO CV (2)IDOWU ADEBAYO CV (2)
IDOWU ADEBAYO CV (2)
 
Robust Repositioning in Large-scale Networks
Robust Repositioning in Large-scale NetworksRobust Repositioning in Large-scale Networks
Robust Repositioning in Large-scale Networks
 
Bramma Consulting Profile
Bramma Consulting ProfileBramma Consulting Profile
Bramma Consulting Profile
 
Marco Gelmetti
Marco GelmettiMarco Gelmetti
Marco Gelmetti
 
Praktikum jaringan komputer 3 http server
Praktikum jaringan komputer 3 http serverPraktikum jaringan komputer 3 http server
Praktikum jaringan komputer 3 http server
 

Similar a Unit tesing y el mito de los 0 bugs

Similar a Unit tesing y el mito de los 0 bugs (20)

software testing
software testingsoftware testing
software testing
 
Entregables de pruebas
Entregables de pruebasEntregables de pruebas
Entregables de pruebas
 
Calidad de software y TDD
Calidad de software y TDDCalidad de software y TDD
Calidad de software y TDD
 
Eyder chimay
Eyder chimayEyder chimay
Eyder chimay
 
Modelo pruebas
Modelo pruebasModelo pruebas
Modelo pruebas
 
Pruebas del software
Pruebas del softwarePruebas del software
Pruebas del software
 
Pruebas del software
Pruebas del softwarePruebas del software
Pruebas del software
 
Pruebas del software
Pruebas del softwarePruebas del software
Pruebas del software
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de software
 
INDUCCION A QA TESTER.pptx
INDUCCION A QA TESTER.pptxINDUCCION A QA TESTER.pptx
INDUCCION A QA TESTER.pptx
 
Pruebas automaticas
Pruebas automaticasPruebas automaticas
Pruebas automaticas
 
Sesión Nº 13 - CALIDAD DE SW.pptx
Sesión Nº 13 - CALIDAD DE SW.pptxSesión Nº 13 - CALIDAD DE SW.pptx
Sesión Nº 13 - CALIDAD DE SW.pptx
 
Pruebas de Software en México
Pruebas de Software en MéxicoPruebas de Software en México
Pruebas de Software en México
 
To mock or not to mock
To mock or not to mockTo mock or not to mock
To mock or not to mock
 
U2T4 - Pruebas del Software
U2T4 - Pruebas del SoftwareU2T4 - Pruebas del Software
U2T4 - Pruebas del Software
 
Prubea de software
Prubea de softwarePrubea de software
Prubea de software
 
Pruebas
PruebasPruebas
Pruebas
 
La auditoría de software
La auditoría de softwareLa auditoría de software
La auditoría de software
 
La auditoría de software
La auditoría de softwareLa auditoría de software
La auditoría de software
 
La auditoría de software
La auditoría de softwareLa auditoría de software
La auditoría de software
 

Más de Fernando Escolar Martínez-Berganza

Roslyn: Hello from the other compiler - dotNet Spain Conference 2016
Roslyn: Hello from the other compiler - dotNet Spain Conference 2016Roslyn: Hello from the other compiler - dotNet Spain Conference 2016
Roslyn: Hello from the other compiler - dotNet Spain Conference 2016Fernando Escolar Martínez-Berganza
 

Más de Fernando Escolar Martínez-Berganza (20)

Por qué todo lo que subo a azure esta mal
Por qué todo lo que subo a azure esta malPor qué todo lo que subo a azure esta mal
Por qué todo lo que subo a azure esta mal
 
Deconstrucción de SOLID
Deconstrucción de SOLIDDeconstrucción de SOLID
Deconstrucción de SOLID
 
Gapand - por qué odio git?
Gapand - por qué odio git?Gapand - por qué odio git?
Gapand - por qué odio git?
 
Betabeers - continuous deployment
Betabeers - continuous deploymentBetabeers - continuous deployment
Betabeers - continuous deployment
 
Devops RoadShow: load testing and autoscale
Devops RoadShow: load testing and autoscaleDevops RoadShow: load testing and autoscale
Devops RoadShow: load testing and autoscale
 
Roslyn: Hello from the other compiler - dotNet Spain Conference 2016
Roslyn: Hello from the other compiler - dotNet Spain Conference 2016Roslyn: Hello from the other compiler - dotNet Spain Conference 2016
Roslyn: Hello from the other compiler - dotNet Spain Conference 2016
 
Reconnect 2015 - ALM VSTS
Reconnect 2015 - ALM VSTSReconnect 2015 - ALM VSTS
Reconnect 2015 - ALM VSTS
 
Codemotion 2015 - Unit Testing
Codemotion 2015 - Unit TestingCodemotion 2015 - Unit Testing
Codemotion 2015 - Unit Testing
 
Unit testing en Windows 10
Unit testing en Windows 10Unit testing en Windows 10
Unit testing en Windows 10
 
Las cronicas de redis
Las cronicas de redisLas cronicas de redis
Las cronicas de redis
 
Redis: no solo una caché
Redis: no solo una cachéRedis: no solo una caché
Redis: no solo una caché
 
DotNet Conference: code smells
DotNet Conference: code smellsDotNet Conference: code smells
DotNet Conference: code smells
 
Foro de Arquitectos: caché en azure a fondo
Foro de Arquitectos: caché en azure a fondoForo de Arquitectos: caché en azure a fondo
Foro de Arquitectos: caché en azure a fondo
 
Codemotion: descubriendo las cachés
Codemotion: descubriendo las cachésCodemotion: descubriendo las cachés
Codemotion: descubriendo las cachés
 
We Love Js 6 - Knockout js (with Marc Rubiño)
We Love Js 6 - Knockout js (with Marc Rubiño)We Love Js 6 - Knockout js (with Marc Rubiño)
We Love Js 6 - Knockout js (with Marc Rubiño)
 
Mobile services by @quiqu3
Mobile services by @quiqu3Mobile services by @quiqu3
Mobile services by @quiqu3
 
Javascript no es vietnam
Javascript no es vietnamJavascript no es vietnam
Javascript no es vietnam
 
Where is my beer?
Where is my beer?Where is my beer?
Where is my beer?
 
Coding kihon + Zombie Code Survival Guide
Coding kihon + Zombie Code Survival GuideCoding kihon + Zombie Code Survival Guide
Coding kihon + Zombie Code Survival Guide
 
Level up your skills
Level up your skillsLevel up your skills
Level up your skills
 

Último

EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxlosdiosesmanzaneros
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilJuanGallardo438714
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 

Último (15)

EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 

Unit tesing y el mito de los 0 bugs

Notas del editor

  1. Tokiota es una empresa joven que a lo largo de su año de vida ha conseguido un gran reconocimiento como especialistas en tecnologías Microsoft. Somos goldpartners en movilidad (desarrollo de Windows pone y Windows Store), pertenecemos al azurecircle y como partner preferente de Microsoft estamos especializados en:Arquitectura de softwareSoluciones CloudInfraestructuraDesarrollo en tecnologías Microsoft
  2. Una prueba de software es una investigación que se lleva a cabo con el fin de proporcionar a los stakeholders información sobre la calidad del mismo. No tienen por qué basarse solo en código. Nos pueden aportar en adición datos sobre performance y reporte de errores o defectos en el software.
  3. Una prueba de software es una investigación que se lleva a cabo con el fin de proporcionar a los stakeholders información sobre la calidad del mismo. No tienen por qué basarse solo en código. Nos pueden aportar en adición datos sobre performance y reporte de errores o defectos en el software.
  4. Métodos de testing:White Box: pruebas de las estructuras internas de trabajo de un programa. El tester especifica unas entradas que se ejecutarán a lo largo de diferentes ámbitos del código y definirá unas salidas apropiadas. Este método se aplica en las pruebas unitarias, de integración y del sistema.Black Box: son pruebas del comportamiento externo de una aplicación. Sin tener en cuenta ni conocimiento de como se han implementado internamente. Pueden ser aplicados a todos los niveles de testing: unitarios, integración, sistema y aceptación. Un ejemplo y subtipo de este método de testing son los visuales o de UI.Grey Box: son pruebas de tipo black box en las que hay que tener cierto conocimiento de la implementación interna, pero no de todo el código fuente. (ejemplo test de carga de wke).Niveles de testing:Unitarios: verifica una funcionalidad de una sección del código fuente específica. Generalmente utilizados por los desarrolladores usando el método de White box.Integración: verifican que los diferentes componentes, interfaces y artefactos de un sistema trabajan bien entre ellos.Sistema: se usan sobre un sistema totalmente integrado y desplegado. Y validan que el sistema cumple los requisitos deseados y que el software se comporta correctamente dentro de este.Aceptación: se usan sobre el aplicativo terminado, para validar que realmente realiza las operaciones como se espera.Tipos de testing:Hay muchos, en dependencia de cual es el objetivo del test que estamos realizando. Una prueba unitaria puede ser de cualquiera de estos tipos….
  5. Métodos de testing:White Box: pruebas de las estructuras internas de trabajo de un programa. El tester especifica unas entradas que se ejecutarán a lo largo de diferentes ámbitos del código y definirá unas salidas apropiadas. Este método se aplica en las pruebas unitarias, de integración y del sistema.Black Box: son pruebas del comportamiento externo de una aplicación. Sin tener en cuenta ni conocimiento de como se han implementado internamente. Pueden ser aplicados a todos los niveles de testing: unitarios, integración, sistema y aceptación. Un ejemplo y subtipo de este método de testing son los visuales o de UI.Grey Box: son pruebas de tipo black box en las que hay que tener cierto conocimiento de la implementación interna, pero no de todo el código fuente. (ejemplo test de carga de wke).Niveles de testing:Unitarios: verifica una funcionalidad de una sección del código fuente específica. Generalmente utilizados por los desarrolladores usando el método de White box.Integración: verifican que los diferentes componentes, interfaces y artefactos de un sistema trabajan bien entre ellos.Sistema: se usan sobre un sistema totalmente integrado y desplegado. Y validan que el sistema cumple los requisitos deseados y que el software se comporta correctamente dentro de este.Aceptación: se usan sobre el aplicativo terminado, para validar que realmente realiza las operaciones como se espera.Tipos de testing:Hay muchos, en dependencia de cual es el objetivo del test que estamos realizando. Una prueba unitaria puede ser de cualquiera de estos tipos….
  6. Métodos de testing:White Box: pruebas de las estructuras internas de trabajo de un programa. El tester especifica unas entradas que se ejecutarán a lo largo de diferentes ámbitos del código y definirá unas salidas apropiadas. Este método se aplica en las pruebas unitarias, de integración y del sistema.Black Box: son pruebas del comportamiento externo de una aplicación. Sin tener en cuenta ni conocimiento de como se han implementado internamente. Pueden ser aplicados a todos los niveles de testing: unitarios, integración, sistema y aceptación. Un ejemplo y subtipo de este método de testing son los visuales o de UI.Grey Box: son pruebas de tipo black box en las que hay que tener cierto conocimiento de la implementación interna, pero no de todo el código fuente. (ejemplo test de carga de wke).Niveles de testing:Unitarios: verifica una funcionalidad de una sección del código fuente específica. Generalmente utilizados por los desarrolladores usando el método de White box.Integración: verifican que los diferentes componentes, interfaces y artefactos de un sistema trabajan bien entre ellos.Sistema: se usan sobre un sistema totalmente integrado y desplegado. Y validan que el sistema cumple los requisitos deseados y que el software se comporta correctamente dentro de este.Aceptación: se usan sobre el aplicativo terminado, para validar que realmente realiza las operaciones como se espera.Tipos de testing:Hay muchos, en dependencia de cual es el objetivo del test que estamos realizando. Una prueba unitaria puede ser de cualquiera de estos tipos….
  7. Una prueba unitaria es una pieza de código (generalmente un método) que invoca a otra pieza de código y comprueba después la exactitud de ciertos supuestos. Si alguno de estos supuestos termina siendo erróneo, la prueba unitaria ha fallado.Una “unidad” es un método o una función.
  8. Fast: Rápidos. Tenemos que ser capaces de ejecutar cientos de pruebas en un solo segundo.Isolated: Una prueba unitaria tiene que estar aislada del resto de pruebas y del resto del código que no se quiere probar.Repeatable: Tenemos que poder repetir una prueba tantas veces como sea necesario sin que esto afecte al resultado. Self-validating: Una prueba unitaria devuelve si se ha pasado o si ha fallado. No tiene que dejar cosas al aire para la interpretación.Timely: Estamos acostumbrados a escribir las pruebas justo después de hacer el código que queremos probar. Y esas pruebas las realiza el mismo desarrollador. Lo cierto es que hacerlas antes de codificar o que las escriba otra persona después, aportará valor. Un unit test tiene que ser escrito en el momento oportuno.
  9. Profesional: es parte de tu código, refactorizalo, documentalo si es que documentas,…. Y básicamente mantenlo como la pieza fundamental de tu desarrollo.Unitario: es muy redundante decirlo, pero solo hay que probar una cosa por prueba. Un aspecto básico del total del código fuente.Automatizable: un test unitario no debería depender de una persona para que lo ejecute y lea los resultados. Deberíamos automatizarlo de alguna forma. En este sentido existen muchas frameworks que nos ayudarán con esta la tarea.No usa recursos: no accede a disco, ni a base de datos, ni abre conexiones remotas.
  10. Suposiciones: asumir condiciones previas sobre las entradas de pruebaOrganizar: establecer el contexto de la unidad bajo pruebaActuar: ejecutar la unidad bajo prueba, capturando cualquier estado resultanteAfirmar: verificar el comportamiento a través de afirmaciones (assertions)
  11. Are youfuckingkidding me?
  12. Lo que puedes hacer es escribir mejor código, código “testeable”.Vamos a ver algunos truquillos:
  13. Testdoubles es el nombre genérico que recibe la técnica de reemplazar un objeto del sistema existente por otro, solo con fines de prueba. Estos objetos ayudarán a que nuestras pruebas unitarias solo prueben una cosa y no las demás.Tipos:Dummy (maniquí): son objetos que se van pasando por el test, pero que en realidad no se usan. Se suelen usar para almacenar datos “vacíos”.Fake (falso): es un objeto que contiene lógica que funciona. Pero esta lógica no sirve para producción. Un ejemplo sería la gestión de una base de datos en memoria, para no crear sockets ni tocar archivos.Stubs (esbozo): proporcionan respuestas enlatadas a las llamadas realizadas durante la prueba, por lo general no responden en absoluto a nada fuera de lo que está programado en la prueba.Spies (espias): son stubs que además de proporcionar esas llamadas específicas, también guardan una estadística de las mismas. Por ejemplo cuantas veces ha sido llamado un método.Mocks (simulacro): son objetos pre-programados con las expectativas de las llamadas que van a recibir. Pueden lanzar excepciones cuando reciben llamadas no admitidas. Y al final se verifica que se han realizado todas las llamadas que se esperaban.
  14. Testdoubles es el nombre genérico que recibe la técnica de reemplazar un objeto del sistema existente por otro, solo con fines de prueba. Estos objetos ayudarán a que nuestras pruebas unitarias solo prueben una cosa y no las demás.Tipos:Dummy (maniquí): son objetos que se van pasando por el test, pero que en realidad no se usan. Se suelen usar para almacenar datos “vacíos”.Fake (falso): es un objeto que contiene lógica que funciona. Pero esta lógica no sirve para producción. Un ejemplo sería la gestión de una base de datos en memoria, para no crear sockets ni tocar archivos.Stubs (esbozo): proporcionan respuestas enlatadas a las llamadas realizadas durante la prueba, por lo general no responden en absoluto a nada fuera de lo que está programado en la prueba.Spies (espias): son stubs que además de proporcionar esas llamadas específicas, también guardan una estadística de las mismas. Por ejemplo cuantas veces ha sido llamado un método.Mocks (simulacro): son objetos pre-programados con las expectativas de las llamadas que van a recibir. Pueden lanzar excepciones cuando reciben llamadas no admitidas. Y al final se verifica que se han realizado todas las llamadas que se esperaban.
  15. Simplificar los constructores de los objetos. No meter lógica:Si dentro de un constructor tienes que usar la palabra “new” para instanciar otro objeto, es que tienes un problema.No asignes valores que no sean atributos de la propia clase. Es decir, mantén la cohesión.No usar métodos como “Initializer” o algo así, aunque sean más fáciles de testear que el propio constructor.Y por supuesto no se debería insertar ninguna lógica o flujo dentro de un constructor, así que ni condiciones ni bucles.
  16. Siempre solemos probar el caso afirmativo de un problema. Cuando un test tiene que dar este resultado. Una buena práctica es también probar el caso de que no lo dé. Es decir, si hago una operación obtengo este resultado, pero es interesante saber que si no la hago exactamente igual, no voy a obtener ese mismo resultado.
  17. - TDD: escribir pruebas antes que el código que las resuelvaATDD: es similar a TDD, pero TDD se basa en pruebas unitarias y ATDD en pruebas de aceptaciónBDD: similar a TDD pero en lugar de unittests se crean specs. Las specs se centran en el comportamiento antes que en la implementación.