SlideShare une entreprise Scribd logo
1  sur  35
Unit Testing
El mito de los cero bugsMADRID · NOV 27-28 · 2015
MADRID · NOV 27-28 · 2015
Fernando Escolar
@fernandoescolar
fernando.escolar@tokiota.com
MADRID · NOV 27-28 · 2015
Agenda
Definición de Unit Test
Estructura
Código Testeable
Unit Test
Estructura
Herramientas
Conclusiones
MADRID · NOV 27-28 · 2015
¿Qué es una prueba de software?
Input Process Output
MADRID · NOV 27-28 · 2015
Clasificación de las pruebas
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
Unit testing
Integration testing
System testing
Acceptance testing
White-Box testing
Black-box testing
Visual testing
Grey-box testing
MADRID · NOV 27-28 · 2015
¿Qué es una prueba unitaria?
MADRID · NOV 27-28 · 2015
¿Qué es una prueba unitaria?
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
MADRID · NOV 27-28 · 2015
Caraterísticas
FIRST
Fast
Isolated
Repeatable
Self-Validating
Timely
MADRID · NOV 27-28 · 2015
Caraterísticas
SECOND
Profesional
Unitario
Automatizable
No usa recursos
MADRID · NOV 27-28 · 2015
Estructura
Triple A
Arrange
Act
Assert
MADRID · NOV 27-28 · 2015
Estructura
Triple Cuádruple A
Assume
Arrange
Act
Assert
MADRID · NOV 27-28 · 2015
Estructura
MADRID · NOV 27-28 · 2015
Si un método o función es una unidad
tengo que desglosarlos al máximo
Vs.
MADRID · NOV 27-28 · 2015
MADRID · NOV 27-28 · 2015
¿Puedo escribir mejores tests?
MADRID · NOV 27-28 · 2015
Puedo escribir mejor código
MADRID · NOV 27-28 · 2015
Desacoplar
MADRID · NOV 27-28 · 2015
MADRID · NOV 27-28 · 2015
Usar patrones de diseño
Inversion Of Control
Abstract Factory
…
MADRID · NOV 27-28 · 2015
Test Doubles
Dummies
Fakes
Spies
Stubs
Mocks
MADRID · NOV 27-28 · 2015
MADRID · NOV 27-28 · 2015
[TestMethod]
public async Task SpyTest()
{
// arange
var service = new WeatherServiceSpy();
// act
await service.GetCityWeatherAsync(CityName);
// assert
service.HasBeenCalled().GetCityWeatherAsync();
service.HasBeenCalled().GetCityWeatherAsync(CityName);
service.HasBeenCalled().Once().GetCityWeatherAsync();
service.HasBeenCalled().Once().GetCityWeatherAsync(CityName);
var invokation = service.GetCalls().First().GetCityWeatherAsync();
Assert.AreEqual("GetCityWeatherAsync", invokation.Name);
}
MADRID · NOV 27-28 · 2015
[TestMethod]
public async Task StubTest()
{
// arange
var service = new WeatherServiceStub();
var dummy = new WeatherInfo();
service
.AddHandlers()
.GetCityWeatherAsync(cityName => Task.FromResult(dummy));
// act
var actual = await service.GetCityWeatherAsync(CityName);
// assert
Assert.AreEqual(dummy, actual);
}
MADRID · NOV 27-28 · 2015
[TestMethod]
public async Task MockTest()
{
// arange
var service = new WeatherServiceMock();
service
.AddVerifications()
.GetCityWeatherAsync(CityName)
.GetCurrentCityWeatherAsync(CityName);
// act
await service.GetCityWeatherAsync(CityName);
await service.GetCurrentCityWeatherAsync(CityName);
// asserts
service.VerifyAll();
}
MADRID · NOV 27-28 · 2015
jMock
MADRID · NOV 27-28 · 2015
Evitar usos de estáticos o singletons
MADRID · NOV 27-28 · 2015
MADRID · NOV 27-28 · 2015
Simplificar constructores
No usar “new”
No asignar algo que no sea un atributo
No usar “Initializer”
No usar condicionales o bucles
MADRID · NOV 27-28 · 2015
Test positivo y negativo
MADRID · NOV 27-28 · 2015
Ventajas de los unit tests
Encontrar bugs pronto
Red de seguridad
Documentación
Mejor diseño
MADRID · NOV 27-28 · 2015
Limitaciones de los unit tests
No detectan problemas de:
Integración
Performance
…
No todo puede ser testeado fácilmente:
Multi-threading
Algoritmos no deterministas
…
MADRID · NOV 27-28 · 2015
Técnicas para hacer unit testing
TDD
ATDD
BDD
MADRID · NOV 27-28 · 2015
Métricas de código
Code Coverage
Cyclomatic Complexity
MADRID · NOV 27-28 · 2015
Preguntas
MADRID · NOV 27-28 · 2015
Muchas gracias
Fernando Escolar
@fernandoescolar
fernando.escolar@tokiota.com

Contenu connexe

En vedette

Mis materias favoritas
Mis materias favoritasMis materias favoritas
Mis materias favoritas
Gerardo Lopez
 
Dreamweaver cs5.5 read me
Dreamweaver cs5.5 read meDreamweaver cs5.5 read me
Dreamweaver cs5.5 read me
josephegojocruz
 
Report of linuxcon japan 2013
Report of linuxcon japan 2013Report of linuxcon japan 2013
Report of linuxcon japan 2013
Naruto TAKAHASHI
 
Silabus Pengabis Mr. Hidayat
Silabus Pengabis Mr. HidayatSilabus Pengabis Mr. Hidayat
Silabus Pengabis Mr. Hidayat
Feni_Triminarni
 

En vedette (15)

Hoa phuong
Hoa phuongHoa phuong
Hoa phuong
 
Futuremother sk
Futuremother skFuturemother sk
Futuremother sk
 
Praktikum jaringan komputer 3 http server eksperimen
Praktikum jaringan komputer 3 http server eksperimenPraktikum jaringan komputer 3 http server eksperimen
Praktikum jaringan komputer 3 http server eksperimen
 
Scientia mobile — MOVR 2015_q2
Scientia mobile — MOVR 2015_q2Scientia mobile — MOVR 2015_q2
Scientia mobile — MOVR 2015_q2
 
Buscadores
BuscadoresBuscadores
Buscadores
 
Freshwater Matters from the FBA September2014
Freshwater Matters from the FBA September2014Freshwater Matters from the FBA September2014
Freshwater Matters from the FBA September2014
 
Mis materias favoritas
Mis materias favoritasMis materias favoritas
Mis materias favoritas
 
Dreamweaver cs5.5 read me
Dreamweaver cs5.5 read meDreamweaver cs5.5 read me
Dreamweaver cs5.5 read me
 
Stamp album 1
Stamp album 1Stamp album 1
Stamp album 1
 
Customer Choice and Direct Delivery: Competitive Options for Commercial Custo...
Customer Choice and Direct Delivery: Competitive Options for Commercial Custo...Customer Choice and Direct Delivery: Competitive Options for Commercial Custo...
Customer Choice and Direct Delivery: Competitive Options for Commercial Custo...
 
Report of linuxcon japan 2013
Report of linuxcon japan 2013Report of linuxcon japan 2013
Report of linuxcon japan 2013
 
How the website is used
How the website is usedHow the website is used
How the website is used
 
Quantum computing
Quantum computingQuantum computing
Quantum computing
 
Silabus Pengabis Mr. Hidayat
Silabus Pengabis Mr. HidayatSilabus Pengabis Mr. Hidayat
Silabus Pengabis Mr. Hidayat
 
05.70 JAVA SE_java list
05.70  JAVA SE_java list05.70  JAVA SE_java list
05.70 JAVA SE_java list
 

Similaire à Codemotion 2015 - Unit Testing

VLCtesting 2013 - Comprobando y refutando las promesas del testing automatiza...
VLCtesting 2013 - Comprobando y refutando las promesas del testing automatiza...VLCtesting 2013 - Comprobando y refutando las promesas del testing automatiza...
VLCtesting 2013 - Comprobando y refutando las promesas del testing automatiza...
Abstracta
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - Trovit
Jordi Gerona
 

Similaire à Codemotion 2015 - Unit Testing (20)

Del infierno al cielo
Del infierno al cieloDel infierno al cielo
Del infierno al cielo
 
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
 
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
 
Codemotion 2015 crash y youdebug
Codemotion 2015   crash y youdebugCodemotion 2015   crash y youdebug
Codemotion 2015 crash y youdebug
 
Aplicando R al análisis de rendimiento de un servidor
Aplicando R al análisis de rendimiento de un servidorAplicando R al análisis de rendimiento de un servidor
Aplicando R al análisis de rendimiento de un servidor
 
15 Upm Solo Pruebas 2009
15 Upm Solo Pruebas 200915 Upm Solo Pruebas 2009
15 Upm Solo Pruebas 2009
 
Primeros pasos con aurelia
Primeros pasos con aureliaPrimeros pasos con aurelia
Primeros pasos con aurelia
 
Desarrollo de pruebas en entornos Java EE
Desarrollo de pruebas en entornos Java EEDesarrollo de pruebas en entornos Java EE
Desarrollo de pruebas en entornos Java EE
 
Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
 
Testing de Aplicaciones Móviles, Públicas, Masivas y Críticas
Testing de Aplicaciones Móviles, Públicas, Masivas y CríticasTesting de Aplicaciones Móviles, Públicas, Masivas y Críticas
Testing de Aplicaciones Móviles, Públicas, Masivas y Críticas
 
VLCtesting 2013 - Comprobando y refutando las promesas del testing automatiza...
VLCtesting 2013 - Comprobando y refutando las promesas del testing automatiza...VLCtesting 2013 - Comprobando y refutando las promesas del testing automatiza...
VLCtesting 2013 - Comprobando y refutando las promesas del testing automatiza...
 
TDD: ¿Cómo escribir código testeable?
TDD: ¿Cómo escribir código testeable?TDD: ¿Cómo escribir código testeable?
TDD: ¿Cómo escribir código testeable?
 
Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++
 
Testing & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnetsTesting & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnets
 
Tdd
TddTdd
Tdd
 
React, Flux y React native
React, Flux y React nativeReact, Flux y React native
React, Flux y React native
 
Los retos de un tester ágil
Los retos de un tester ágilLos retos de un tester ágil
Los retos de un tester ágil
 
Test unitarios
Test unitariosTest unitarios
Test unitarios
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - Trovit
 
Testing Software
Testing SoftwareTesting Software
Testing Software
 

Plus de Fernando Escolar Martínez-Berganza

Plus 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
 
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
 
Unit tesing y el mito de los 0 bugs
Unit tesing y el mito de los 0 bugsUnit tesing y el mito de los 0 bugs
Unit tesing y el mito de los 0 bugs
 
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
 

Dernier

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Dernier (11)

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
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
 
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
 
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
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
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
 
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
 
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
 

Codemotion 2015 - Unit Testing

  • 1. Unit Testing El mito de los cero bugsMADRID · NOV 27-28 · 2015
  • 2. MADRID · NOV 27-28 · 2015 Fernando Escolar @fernandoescolar fernando.escolar@tokiota.com
  • 3. MADRID · NOV 27-28 · 2015 Agenda Definición de Unit Test Estructura Código Testeable Unit Test Estructura Herramientas Conclusiones
  • 4. MADRID · NOV 27-28 · 2015 ¿Qué es una prueba de software? Input Process Output
  • 5. MADRID · NOV 27-28 · 2015 Clasificación de las pruebas 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 Unit testing Integration testing System testing Acceptance testing White-Box testing Black-box testing Visual testing Grey-box testing
  • 6. MADRID · NOV 27-28 · 2015 ¿Qué es una prueba unitaria?
  • 7. MADRID · NOV 27-28 · 2015 ¿Qué es una prueba unitaria? 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
  • 8. MADRID · NOV 27-28 · 2015 Caraterísticas FIRST Fast Isolated Repeatable Self-Validating Timely
  • 9. MADRID · NOV 27-28 · 2015 Caraterísticas SECOND Profesional Unitario Automatizable No usa recursos
  • 10. MADRID · NOV 27-28 · 2015 Estructura Triple A Arrange Act Assert
  • 11. MADRID · NOV 27-28 · 2015 Estructura Triple Cuádruple A Assume Arrange Act Assert
  • 12. MADRID · NOV 27-28 · 2015 Estructura
  • 13. MADRID · NOV 27-28 · 2015 Si un método o función es una unidad tengo que desglosarlos al máximo Vs.
  • 14. MADRID · NOV 27-28 · 2015
  • 15. MADRID · NOV 27-28 · 2015 ¿Puedo escribir mejores tests?
  • 16. MADRID · NOV 27-28 · 2015 Puedo escribir mejor código
  • 17. MADRID · NOV 27-28 · 2015 Desacoplar
  • 18. MADRID · NOV 27-28 · 2015
  • 19. MADRID · NOV 27-28 · 2015 Usar patrones de diseño Inversion Of Control Abstract Factory …
  • 20. MADRID · NOV 27-28 · 2015 Test Doubles Dummies Fakes Spies Stubs Mocks
  • 21. MADRID · NOV 27-28 · 2015
  • 22. MADRID · NOV 27-28 · 2015 [TestMethod] public async Task SpyTest() { // arange var service = new WeatherServiceSpy(); // act await service.GetCityWeatherAsync(CityName); // assert service.HasBeenCalled().GetCityWeatherAsync(); service.HasBeenCalled().GetCityWeatherAsync(CityName); service.HasBeenCalled().Once().GetCityWeatherAsync(); service.HasBeenCalled().Once().GetCityWeatherAsync(CityName); var invokation = service.GetCalls().First().GetCityWeatherAsync(); Assert.AreEqual("GetCityWeatherAsync", invokation.Name); }
  • 23. MADRID · NOV 27-28 · 2015 [TestMethod] public async Task StubTest() { // arange var service = new WeatherServiceStub(); var dummy = new WeatherInfo(); service .AddHandlers() .GetCityWeatherAsync(cityName => Task.FromResult(dummy)); // act var actual = await service.GetCityWeatherAsync(CityName); // assert Assert.AreEqual(dummy, actual); }
  • 24. MADRID · NOV 27-28 · 2015 [TestMethod] public async Task MockTest() { // arange var service = new WeatherServiceMock(); service .AddVerifications() .GetCityWeatherAsync(CityName) .GetCurrentCityWeatherAsync(CityName); // act await service.GetCityWeatherAsync(CityName); await service.GetCurrentCityWeatherAsync(CityName); // asserts service.VerifyAll(); }
  • 25. MADRID · NOV 27-28 · 2015 jMock
  • 26. MADRID · NOV 27-28 · 2015 Evitar usos de estáticos o singletons
  • 27. MADRID · NOV 27-28 · 2015
  • 28. MADRID · NOV 27-28 · 2015 Simplificar constructores No usar “new” No asignar algo que no sea un atributo No usar “Initializer” No usar condicionales o bucles
  • 29. MADRID · NOV 27-28 · 2015 Test positivo y negativo
  • 30. MADRID · NOV 27-28 · 2015 Ventajas de los unit tests Encontrar bugs pronto Red de seguridad Documentación Mejor diseño
  • 31. MADRID · NOV 27-28 · 2015 Limitaciones de los unit tests No detectan problemas de: Integración Performance … No todo puede ser testeado fácilmente: Multi-threading Algoritmos no deterministas …
  • 32. MADRID · NOV 27-28 · 2015 Técnicas para hacer unit testing TDD ATDD BDD
  • 33. MADRID · NOV 27-28 · 2015 Métricas de código Code Coverage Cyclomatic Complexity
  • 34. MADRID · NOV 27-28 · 2015 Preguntas
  • 35. MADRID · NOV 27-28 · 2015 Muchas gracias Fernando Escolar @fernandoescolar fernando.escolar@tokiota.com

Notes de l'éditeur

  1. 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.
  2. 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….
  3. 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.
  4. 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.
  5. Organizar: establecer el contexto de la unidad bajo prueba Actuar: ejecutar la unidad bajo prueba, capturando cualquier estado resultante Afirmar: verificar el comportamiento a través de afirmaciones (assertions)
  6. Suposiciones: asumir condiciones previas sobre las entradas de prueba Organizar: establecer el contexto de la unidad bajo prueba Actuar: ejecutar la unidad bajo prueba, capturando cualquier estado resultante Afirmar: verificar el comportamiento a través de afirmaciones (assertions)
  7. Are you fucking kidding me?
  8. Lo que puedes hacer es escribir mejor código, código “testeable”. Vamos a ver algunos truquillos:
  9. Test doubles 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.
  10. Fake Server de sinonjs
  11. 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.
  12. 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.
  13. - TDD: escribir pruebas antes que el código que las resuelva ATDD: es similar a TDD, pero TDD se basa en pruebas unitarias y ATDD en pruebas de aceptación BDD: similar a TDD pero en lugar de unit tests se crean specs. Las specs se centran en el comportamiento antes que en la implementación.