En esta charla vamos a hablar principalmente de testing aplicado a PHP. Daremos un pequeño y rápido repaso a PHPunit, si algún asistente no lo conoce, y después nos meteremos de lleno en el meollo de la cuestión que son los "test doubles": veremos qué son, para qué sirven y como trabajar con ellos cómodamente en PHP gracias a la librería Mockery. Para terminar la sesión veremos algunos ejemplos prácticos en los que veremos aplicados algunos de los conceptos teóricos vistos anteriormente.
El documento describe las palabras reservadas y tipos de datos en Java. Explica las funciones de palabras clave como abstract, assert, break y continue. También detalla los tipos de datos primitivos como byte, short, int y long con sus tamaños y rangos de valores. Finalmente, indica que los caracteres se pueden escribir entre comillas simples o usando su valor Unicode.
Este documento lista las palabras reservadas de Java y proporciona breves directrices sobre la nomenclatura de identificadores, constantes, clases, métodos y variables en Java. Identifica 42 palabras reservadas de Java y describe los requisitos de nomenclatura como usar mayúsculas y minúsculas, separar palabras con guiones bajos y usar la notación camello.
Este documento describe los servicios en Zend Framework 2. Zend Framework 2 es un framework PHP de código abierto que permite la construcción de aplicaciones web y servicios orientados a objetos. Los servicios son librerías reutilizables que realizan tareas específicas como el envío de correos electrónicos o registro de logs. El Service Manager de Zend Framework 2 permite registrar y localizar servicios de forma flexible mediante fábricas, invocables y alias.
JUnit es un framework para implementar pruebas unitarias en Java que se integra con Maven. Utiliza anotaciones como @Test, @Before, @After y @Ignore para indicar métodos de prueba y configuración, y asserts como assertTrue, assertFalse y assertEquals para validar las condiciones de aceptación en los tests.
P2 actividades 2 y 3 infografía palabras reservadasRoberto Cortez
Este documento proporciona recomendaciones para nombrar objetos, clases, métodos, variables y constantes en Java. Recomienda que los nombres sean descriptivos y no utilicen abreviaturas ambiguas. También cubre la estructura general de métodos y clases Java, y cómo crear objetos indicando la clase y el constructor. Finalmente, lista las palabras reservadas de Java que no pueden usarse como nombres.
Este documento presenta información sobre pruebas de software, incluyendo diferentes tipos de pruebas como pruebas unitarias, de integración, de sistema y de aceptación. También describe técnicas de prueba como caja blanca y caja negra, y procesos como el diseño de casos de prueba y la ejecución y seguimiento de resultados de las pruebas. El documento provee una guía detallada para la planificación y ejecución efectiva de pruebas de software.
Este documento lista las palabras reservadas en Java y proporciona una breve descripción de cada una. Algunas palabras clave como abstract, boolean, break, byte describen tipos de datos primitivos o sentencias de control de flujo, mientras que otras como class, interface, public, private especifican elementos de programación orientada a objetos como clases, interfaces y modificadores de acceso. Finalmente, palabras como throw, try, catch se refieren a la gestión de excepciones en Java.
Este documento discute problemas de concurrencia como el interbloqueo e inanición. Explica que el interbloqueo ocurre cuando procesos compiten por recursos de forma que se bloquean mutuamente, y presenta estrategias para prevenirlo como ordenar solicitudes de recursos o expulsar procesos. También cubre tipos de recursos y mecanismos de comunicación entre procesos en UNIX como tuberías, mensajes y memoria compartida.
El documento describe las palabras reservadas y tipos de datos en Java. Explica las funciones de palabras clave como abstract, assert, break y continue. También detalla los tipos de datos primitivos como byte, short, int y long con sus tamaños y rangos de valores. Finalmente, indica que los caracteres se pueden escribir entre comillas simples o usando su valor Unicode.
Este documento lista las palabras reservadas de Java y proporciona breves directrices sobre la nomenclatura de identificadores, constantes, clases, métodos y variables en Java. Identifica 42 palabras reservadas de Java y describe los requisitos de nomenclatura como usar mayúsculas y minúsculas, separar palabras con guiones bajos y usar la notación camello.
Este documento describe los servicios en Zend Framework 2. Zend Framework 2 es un framework PHP de código abierto que permite la construcción de aplicaciones web y servicios orientados a objetos. Los servicios son librerías reutilizables que realizan tareas específicas como el envío de correos electrónicos o registro de logs. El Service Manager de Zend Framework 2 permite registrar y localizar servicios de forma flexible mediante fábricas, invocables y alias.
JUnit es un framework para implementar pruebas unitarias en Java que se integra con Maven. Utiliza anotaciones como @Test, @Before, @After y @Ignore para indicar métodos de prueba y configuración, y asserts como assertTrue, assertFalse y assertEquals para validar las condiciones de aceptación en los tests.
P2 actividades 2 y 3 infografía palabras reservadasRoberto Cortez
Este documento proporciona recomendaciones para nombrar objetos, clases, métodos, variables y constantes en Java. Recomienda que los nombres sean descriptivos y no utilicen abreviaturas ambiguas. También cubre la estructura general de métodos y clases Java, y cómo crear objetos indicando la clase y el constructor. Finalmente, lista las palabras reservadas de Java que no pueden usarse como nombres.
Este documento presenta información sobre pruebas de software, incluyendo diferentes tipos de pruebas como pruebas unitarias, de integración, de sistema y de aceptación. También describe técnicas de prueba como caja blanca y caja negra, y procesos como el diseño de casos de prueba y la ejecución y seguimiento de resultados de las pruebas. El documento provee una guía detallada para la planificación y ejecución efectiva de pruebas de software.
Este documento lista las palabras reservadas en Java y proporciona una breve descripción de cada una. Algunas palabras clave como abstract, boolean, break, byte describen tipos de datos primitivos o sentencias de control de flujo, mientras que otras como class, interface, public, private especifican elementos de programación orientada a objetos como clases, interfaces y modificadores de acceso. Finalmente, palabras como throw, try, catch se refieren a la gestión de excepciones en Java.
Este documento discute problemas de concurrencia como el interbloqueo e inanición. Explica que el interbloqueo ocurre cuando procesos compiten por recursos de forma que se bloquean mutuamente, y presenta estrategias para prevenirlo como ordenar solicitudes de recursos o expulsar procesos. También cubre tipos de recursos y mecanismos de comunicación entre procesos en UNIX como tuberías, mensajes y memoria compartida.
Este documento trata sobre hilos de ejecución (threads) en Java. Explica conceptos como cómo crear threads extendiendo la clase Thread o implementando Runnable, los diferentes estados de un thread, y métodos como start(), sleep(), yield() e interrupt(). También cubre sincronización, deadlocks, y la interacción entre threads mediante wait() y notify().
P2 actividades 2 y 3 infografía palabras reservadasErick Ramirez
Este documento lista las palabras reservadas y tipos de datos en Java. Describe las 58 palabras reservadas de Java y sus funciones, así como los 8 tipos de datos primitivos (byte, short, int, long, float, double, char, boolean) e incluye su representación, tamaño, rango de valores y valor por defecto. El documento proporciona esta información fundamental sobre las características básicas del lenguaje Java.
Curso TDD Ruby on Rails #01: Introducción al testingAlberto Perdomo
Este documento presenta un curso de pruebas de software (testing) que se llevará a cabo del 12 al 16 de abril de 2010. Incluye información sobre el instructor, Alberto Perdomo, así como sobre conceptos clave relacionados con el testing como los tipos de pruebas, la importancia de automatizar las pruebas y especificar el comportamiento deseado a través de las pruebas.
Este documento proporciona información sobre pruebas unitarias en Ruby utilizando la biblioteca Test::Unit. Explica los elementos básicos como test cases, test fixtures, test suites y aserciones. También cubre cómo se utiliza Test::Unit en Ruby on Rails, incluidos los entornos de prueba, la estructura de pruebas y las tareas Rake para ejecutar pruebas.
Los procesos compiten por recursos siguiendo estas etapas: petición, utilización y liberación. Los recursos pueden ser compartidos o exclusivos. Si un proceso pide acceso compartido mientras otro lo usa de forma exclusiva, debe esperar. Dos procesos forman un interbloqueo cuando cada uno mantiene un recurso del otro y espera; esto impide el progreso. Las estrategias para prevenir el interbloqueo incluyen evitar que los procesos mantengan recursos mientras esperan y numerar los recursos para solicitarlos de forma ordenada
5. otros aspectos de la programación orientada a objetosHectorMamani
El documento describe diferentes aspectos avanzados de la programación orientada a objetos como el uso de patrones de diseño, bibliotecas, modelado de objetos, concurrencia, persistencia, genericidad y excepciones.
Este documento trata sobre conceptos de programación orientada a objetos como constructores, destructores, sobrecarga de métodos y operadores. Explica que los constructores inicializan los objetos, los destructores limpian la memoria, y la sobrecarga permite reutilizar nombres de métodos y operadores con diferentes parámetros.
Este documento lista las palabras reservadas y tipos de datos en Java. Incluye palabras clave como abstract, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, extends, final, finally, float, for, if, implements, import, int, interface, long, native, new, null, package, protected, public, return, short, static, super, switch, this, throw, throws, transient, try, void, while y tipos de datos primitivos como byte, char, double, float, int, long, short. También describe brevemente el propósito de algun
El documento describe las estructuras de control en Java, incluyendo estructuras de selección como if, if-else, operador condicional y switch, así como estructuras de repetición como while, do-while y for. También explica el uso de vectores y matrices para almacenar datos.
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
Este documento presenta una charla sobre pruebas de software. La charla discute los tipos de pruebas unitarias, de integración y de aceptación y los beneficios y desafíos de cada una. También cubre temas como las escuelas de pruebas unitarias, el uso de dobles de prueba, y marcos de prueba como PHPUnit y Mockery. La charla concluye recomendando separar la lógica de prueba de los datos de prueba y minimizar el uso de dobles de prueba.
Este documento presenta una charla sobre pruebas de software. Brevemente describe los tipos principales de pruebas (pruebas unitarias, de integración y de aceptación), los dobles de prueba y varias bibliotecas para crear mocks en PHP. También discute enfoques como las escuelas de pruebas unitarias de Chicago y Londres y recomienda minimizar el uso de dobles.
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
Este documento presenta una charla sobre pruebas de software. La charla discute los tipos de pruebas unitarias, de integración y de aceptación y los beneficios y desafíos de cada una. También cubre temas como las escuelas de pruebas unitarias, el uso de dobles de prueba, y marcos de prueba como PHPUnit y Mockery. La charla concluye recomendando separar la lógica de prueba de los datos de prueba y minimizar el uso de dobles de prueba.
Este documento describe diferentes técnicas para probar aplicaciones Angular, incluyendo TDD, BDD, pruebas unitarias, y pruebas E2E. Explica cómo escribir pruebas para cada tipo de test, así como herramientas como Karma, Protractor y Jasmine que pueden usarse para automatizar las pruebas. También cubre temas como componentes, $scope, $compile y $httpBackend para simular backends.
El documento presenta información sobre pruebas unitarias. Explica que las pruebas unitarias prueban partes individuales de código para garantizar que funcionen correctamente de forma aislada. También describe elementos clave de las pruebas unitarias como cobertura de código, aserciones, ciclo de vida de pruebas, casos de prueba y conjuntos de pruebas.
20180313 Keep Calm And Test Your Code RiojaDotNetalbertortizcape
Presentación para la RiojaDotNet sobre testing.
Enlaces de referencia:
--
Keep Calm And Unit Test Your Code
https://www.keepcalmandposters.com/poster/5829573_keep_calm_and_unit_test_your_code
--
TestPyramid
https://martinfowler.com/bliki/TestPyramid.html
--
The Practical Test Pyramid
https://martinfowler.com/articles/practical-test-pyramid.html
--
TestDouble
https://martinfowler.com/bliki/TestDouble.html
--
UnitTest
https://martinfowler.com/bliki/UnitTest.html
--
IntegrationTest
https://martinfowler.com/bliki/IntegrationTest.html
--
Unit Tests Are FIRST (Fast, Isolated, Repeatable, Self-Verifying, and Timely)
https://pragprog.com/magazines/2012-01/unit-tests-are-first
--
F.I.R.S.T Principles of Unit Testing
https://github.com/ghsukumar/SFDC_Best_Practices/wiki/F.I.R.S.T-Principles-of-Unit-Testing
--
Simulando las dependencias en las pruebas unitarias. Dummies vs Stubs vs Mocks vs Spies vs Fakes
http://www.javiergarzas.com/2015/09/dummies-vs-stubs-vs-mocks-vs-spies-vs-fakes.html
--
What's the difference between faking, mocking, and stubbing?
https://stackoverflow.com/questions/346372/whats-the-difference-between-faking-mocking-and-stubbing
--
Mocks Aren't Stubs
https://martinfowler.com/articles/mocksArentStubs.html
--
Java - How to use stubs in JUnit
https://stackoverflow.com/questions/31890991/java-how-to-use-stubs-in-junit
--
GivenWhenThen
https://martinfowler.com/bliki/GivenWhenThen.html
--
Conceptos básicos de prueba unitaria - Escribir las pruebas
https://msdn.microsoft.com/es-es/library/hh694602.aspx#Anchor_3
--
¿Qué es eso del testing exploratorio? ¿Y para qué me sirve?
http://www.javiergarzas.com/2015/01/testing-exploratorio-10-min.html
--
Naming Test Classes and Methods
https://codurance.com/2014/12/13/naming-test-classes-and-methods/
--
Rafa Gomez y Javier Ferrer - Clean Code, SOLID, CQRS... ¿Y qué hay de nuestros test? | BCN SWC 2017
https://www.youtube.com/watch?v=cw6Va1ZW7iI&list=PLKxa4AIfm4pXfHIuhB89H6TdUO8syJMui&index=3
--
Deconstruyendo la pirámide de los tests
http://blog.koalite.com/2014/05/deconstruyendo-la-piramide-de-los-tests/
--
No pierdas el tiempo escribiendo tests
http://blog.koalite.com/2017/11/no-pierdas-el-tiempo-escribiendo-tests/
--
NO automatices más Test de interfaz gráfica de usuario
http://www.javiergarzas.com/2016/06/14044.html
--
Just Say No to More End-to-End Tests
https://testing.googleblog.com/2015/04/just-say-no-to-more-end-to-end-tests.html
--
Commercial Fiat 500S – What bad boyS drive
https://www.youtube.com/watch?v=4ndyAlJN9Fk
Este documento presenta una formación sobre pruebas unitarias (test unitarios). Explica los tipos de pruebas, incluyendo pruebas funcionales, de integración, de rendimiento y pruebas unitarias. Detalla los beneficios de las pruebas unitarias y la estructura básica de una prueba unitaria (arreglar, actuar, afirmar). También cubre conceptos como dobles de prueba (mocks, stubs, spies), cómo escribir pruebas unitarias efectivas y herramientas para pruebas unitarias
Este documento presenta las principales prácticas técnicas para mejorar la calidad del código y el proceso de desarrollo de software. Se discuten temas como integración continua, pruebas automatizadas, análisis estático de código, y se destaca la importancia de implementar estas prácticas para entregar software de manera ágil y sostenible. También se cubren conceptos como pruebas unitarias, de integración y funcionales, y se provee una bibliografía para profundizar en estos temas.
Presentation in Spanish given at DeSymfony Day 2014 in Barcelona about different approaches of testing with my teammate Jordi Llonch.
We created a GitHub repository comparing the main libraries available in PHP: https://github.com/Akamon/to-mock-or-not-to-mock
Este documento trata sobre hilos de ejecución (threads) en Java. Explica conceptos como cómo crear threads extendiendo la clase Thread o implementando Runnable, los diferentes estados de un thread, y métodos como start(), sleep(), yield() e interrupt(). También cubre sincronización, deadlocks, y la interacción entre threads mediante wait() y notify().
P2 actividades 2 y 3 infografía palabras reservadasErick Ramirez
Este documento lista las palabras reservadas y tipos de datos en Java. Describe las 58 palabras reservadas de Java y sus funciones, así como los 8 tipos de datos primitivos (byte, short, int, long, float, double, char, boolean) e incluye su representación, tamaño, rango de valores y valor por defecto. El documento proporciona esta información fundamental sobre las características básicas del lenguaje Java.
Curso TDD Ruby on Rails #01: Introducción al testingAlberto Perdomo
Este documento presenta un curso de pruebas de software (testing) que se llevará a cabo del 12 al 16 de abril de 2010. Incluye información sobre el instructor, Alberto Perdomo, así como sobre conceptos clave relacionados con el testing como los tipos de pruebas, la importancia de automatizar las pruebas y especificar el comportamiento deseado a través de las pruebas.
Este documento proporciona información sobre pruebas unitarias en Ruby utilizando la biblioteca Test::Unit. Explica los elementos básicos como test cases, test fixtures, test suites y aserciones. También cubre cómo se utiliza Test::Unit en Ruby on Rails, incluidos los entornos de prueba, la estructura de pruebas y las tareas Rake para ejecutar pruebas.
Los procesos compiten por recursos siguiendo estas etapas: petición, utilización y liberación. Los recursos pueden ser compartidos o exclusivos. Si un proceso pide acceso compartido mientras otro lo usa de forma exclusiva, debe esperar. Dos procesos forman un interbloqueo cuando cada uno mantiene un recurso del otro y espera; esto impide el progreso. Las estrategias para prevenir el interbloqueo incluyen evitar que los procesos mantengan recursos mientras esperan y numerar los recursos para solicitarlos de forma ordenada
5. otros aspectos de la programación orientada a objetosHectorMamani
El documento describe diferentes aspectos avanzados de la programación orientada a objetos como el uso de patrones de diseño, bibliotecas, modelado de objetos, concurrencia, persistencia, genericidad y excepciones.
Este documento trata sobre conceptos de programación orientada a objetos como constructores, destructores, sobrecarga de métodos y operadores. Explica que los constructores inicializan los objetos, los destructores limpian la memoria, y la sobrecarga permite reutilizar nombres de métodos y operadores con diferentes parámetros.
Este documento lista las palabras reservadas y tipos de datos en Java. Incluye palabras clave como abstract, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, extends, final, finally, float, for, if, implements, import, int, interface, long, native, new, null, package, protected, public, return, short, static, super, switch, this, throw, throws, transient, try, void, while y tipos de datos primitivos como byte, char, double, float, int, long, short. También describe brevemente el propósito de algun
El documento describe las estructuras de control en Java, incluyendo estructuras de selección como if, if-else, operador condicional y switch, así como estructuras de repetición como while, do-while y for. También explica el uso de vectores y matrices para almacenar datos.
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
Este documento presenta una charla sobre pruebas de software. La charla discute los tipos de pruebas unitarias, de integración y de aceptación y los beneficios y desafíos de cada una. También cubre temas como las escuelas de pruebas unitarias, el uso de dobles de prueba, y marcos de prueba como PHPUnit y Mockery. La charla concluye recomendando separar la lógica de prueba de los datos de prueba y minimizar el uso de dobles de prueba.
Este documento presenta una charla sobre pruebas de software. Brevemente describe los tipos principales de pruebas (pruebas unitarias, de integración y de aceptación), los dobles de prueba y varias bibliotecas para crear mocks en PHP. También discute enfoques como las escuelas de pruebas unitarias de Chicago y Londres y recomienda minimizar el uso de dobles.
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
Este documento presenta una charla sobre pruebas de software. La charla discute los tipos de pruebas unitarias, de integración y de aceptación y los beneficios y desafíos de cada una. También cubre temas como las escuelas de pruebas unitarias, el uso de dobles de prueba, y marcos de prueba como PHPUnit y Mockery. La charla concluye recomendando separar la lógica de prueba de los datos de prueba y minimizar el uso de dobles de prueba.
Este documento describe diferentes técnicas para probar aplicaciones Angular, incluyendo TDD, BDD, pruebas unitarias, y pruebas E2E. Explica cómo escribir pruebas para cada tipo de test, así como herramientas como Karma, Protractor y Jasmine que pueden usarse para automatizar las pruebas. También cubre temas como componentes, $scope, $compile y $httpBackend para simular backends.
El documento presenta información sobre pruebas unitarias. Explica que las pruebas unitarias prueban partes individuales de código para garantizar que funcionen correctamente de forma aislada. También describe elementos clave de las pruebas unitarias como cobertura de código, aserciones, ciclo de vida de pruebas, casos de prueba y conjuntos de pruebas.
20180313 Keep Calm And Test Your Code RiojaDotNetalbertortizcape
Presentación para la RiojaDotNet sobre testing.
Enlaces de referencia:
--
Keep Calm And Unit Test Your Code
https://www.keepcalmandposters.com/poster/5829573_keep_calm_and_unit_test_your_code
--
TestPyramid
https://martinfowler.com/bliki/TestPyramid.html
--
The Practical Test Pyramid
https://martinfowler.com/articles/practical-test-pyramid.html
--
TestDouble
https://martinfowler.com/bliki/TestDouble.html
--
UnitTest
https://martinfowler.com/bliki/UnitTest.html
--
IntegrationTest
https://martinfowler.com/bliki/IntegrationTest.html
--
Unit Tests Are FIRST (Fast, Isolated, Repeatable, Self-Verifying, and Timely)
https://pragprog.com/magazines/2012-01/unit-tests-are-first
--
F.I.R.S.T Principles of Unit Testing
https://github.com/ghsukumar/SFDC_Best_Practices/wiki/F.I.R.S.T-Principles-of-Unit-Testing
--
Simulando las dependencias en las pruebas unitarias. Dummies vs Stubs vs Mocks vs Spies vs Fakes
http://www.javiergarzas.com/2015/09/dummies-vs-stubs-vs-mocks-vs-spies-vs-fakes.html
--
What's the difference between faking, mocking, and stubbing?
https://stackoverflow.com/questions/346372/whats-the-difference-between-faking-mocking-and-stubbing
--
Mocks Aren't Stubs
https://martinfowler.com/articles/mocksArentStubs.html
--
Java - How to use stubs in JUnit
https://stackoverflow.com/questions/31890991/java-how-to-use-stubs-in-junit
--
GivenWhenThen
https://martinfowler.com/bliki/GivenWhenThen.html
--
Conceptos básicos de prueba unitaria - Escribir las pruebas
https://msdn.microsoft.com/es-es/library/hh694602.aspx#Anchor_3
--
¿Qué es eso del testing exploratorio? ¿Y para qué me sirve?
http://www.javiergarzas.com/2015/01/testing-exploratorio-10-min.html
--
Naming Test Classes and Methods
https://codurance.com/2014/12/13/naming-test-classes-and-methods/
--
Rafa Gomez y Javier Ferrer - Clean Code, SOLID, CQRS... ¿Y qué hay de nuestros test? | BCN SWC 2017
https://www.youtube.com/watch?v=cw6Va1ZW7iI&list=PLKxa4AIfm4pXfHIuhB89H6TdUO8syJMui&index=3
--
Deconstruyendo la pirámide de los tests
http://blog.koalite.com/2014/05/deconstruyendo-la-piramide-de-los-tests/
--
No pierdas el tiempo escribiendo tests
http://blog.koalite.com/2017/11/no-pierdas-el-tiempo-escribiendo-tests/
--
NO automatices más Test de interfaz gráfica de usuario
http://www.javiergarzas.com/2016/06/14044.html
--
Just Say No to More End-to-End Tests
https://testing.googleblog.com/2015/04/just-say-no-to-more-end-to-end-tests.html
--
Commercial Fiat 500S – What bad boyS drive
https://www.youtube.com/watch?v=4ndyAlJN9Fk
Este documento presenta una formación sobre pruebas unitarias (test unitarios). Explica los tipos de pruebas, incluyendo pruebas funcionales, de integración, de rendimiento y pruebas unitarias. Detalla los beneficios de las pruebas unitarias y la estructura básica de una prueba unitaria (arreglar, actuar, afirmar). También cubre conceptos como dobles de prueba (mocks, stubs, spies), cómo escribir pruebas unitarias efectivas y herramientas para pruebas unitarias
Este documento presenta las principales prácticas técnicas para mejorar la calidad del código y el proceso de desarrollo de software. Se discuten temas como integración continua, pruebas automatizadas, análisis estático de código, y se destaca la importancia de implementar estas prácticas para entregar software de manera ágil y sostenible. También se cubren conceptos como pruebas unitarias, de integración y funcionales, y se provee una bibliografía para profundizar en estos temas.
Presentation in Spanish given at DeSymfony Day 2014 in Barcelona about different approaches of testing with my teammate Jordi Llonch.
We created a GitHub repository comparing the main libraries available in PHP: https://github.com/Akamon/to-mock-or-not-to-mock
El documento presenta 16 reglas para escribir buenos tests utilizando desarrollo guiado por pruebas (TDD). Las reglas incluyen: 1) los tests deben fallar inicialmente, 2) medir el tiempo de cada paso, 3) nombrar los tests describiendo setup, exercise y assertions, 4) nombrar los tests por caso funcional no datos, 5) los tests no son verificación formal, 6) seguir estructura setup-exercise-assertion. El documento concluye enfatizando que los tests son un sistema que debe diseñarse y mantenerse siguiendo buenas pr
El documento proporciona consejos para escribir pruebas unitarias efectivas. Explica que las pruebas unitarias deben asegurar que el código funcione como se espera, mejorar la calidad y acelerar el desarrollo. Recomienda que las pruebas sean rápidas, aisladas, repetibles y testeen una pequeña funcionalidad usando el patrón AAA (arrange, act, assert). También aborda conceptos como cobertura de código, pruebas en vivo y principios SOLID para hacer el código más testeable.
Pruebas de Manto Cuantos tipos de pruebas hay ? Que es una estrategia ? Que e...defijel142
Cuantos tipos de pruebas hay ?
Que es una estrategia ?
Que es verificación?
Que es validación?
Es lo mismo estrategia o guía o check list o .....?
Es lo mismo verificacion y validación?
Este documento trata sobre pruebas unitarias y cómo escribir código que sea fácil de probar. Explica que los test unitarios prueban unidades lógicas de código de forma aislada, mientras que los test de integración prueban la interacción entre módulos. También describe cómo utilizar dobles de prueba como stubs y mocks para reemplazar dependencias, y cómo aplicar inversión de dependencias para desacoplar el código y hacerlo más testable.
Este documento describe los principios y beneficios de las pruebas unitarias y la metodología de desarrollo guiado por pruebas (TDD). Explica que las pruebas unitarias prueban partes individuales del código de forma rápida y aislada para identificar problemas. Siguiendo las leyes de TDD, primero se escribe una prueba unitaria fallida y luego solo el código necesario para que pase, evitando sobrediseñar. Esto hace que el código sea más flexible, mantenible y reutilizable.
Este documento presenta información sobre la verificación de software mediante pruebas. Explica conceptos clave como error, defecto y fallo, y describe diferentes tipos de pruebas como pruebas de unidad, integración y sistema. También cubre técnicas de prueba como caja blanca, caja negra y valores límite, y principios como que las pruebas solo pueden mostrar la presencia de defectos, no su ausencia.
El documento presenta una introducción al Behavior Driven Development (BDD) y su herramienta Cucumber. Explica que BDD se centra en el comportamiento del software desde la perspectiva del cliente, mientras que el Test Driven Development (TDD) se centra en la implementación. También describe cómo Cucumber permite definir casos de prueba en un lenguaje de dominio específico (Gherkin) que es legible para los negocios. Finalmente, proporciona algunos consejos prácticos para empezar con BDD y Cucumber.
Este documento presenta información sobre técnicas de pruebas de software, en particular sobre pruebas unitarias. Explica que una prueba unitaria comprueba el correcto funcionamiento de una unidad de código individual, como una función o clase. Detalla características, ventajas y desventajas de las pruebas unitarias, así como consideraciones al implementarlas. Finalmente, propone crear una clase con operaciones básicas para demostrar cómo realizar pruebas unitarias.
Cómo diagnosticar problemas de rendimiento en entornos LAMPJavier Carranza
Este documento presenta varios ejemplos de uso de herramientas de depuración y profiling como XHProf, Xdebug y Vdebug. Explica cómo instalar y configurar estas herramientas y ofrece casos prácticos como detectar problemas de rendimiento debidos a excesos de tiempo de ejecución, consumo de memoria o llamadas a servicios externos. También sugiere ideas para probar el rendimiento comparando APC vs Memcache o MySQL vs Apache Solr.
Buscador de Eventos y Fiestas en España - Buscafiestaholabuscafiesta
Buscafiesta.es es el buscador líder en España para fiestas y eventos, diseñado para satisfacer las necesidades tanto de organizadores como de asistentes. Este innovador software ofrece una plataforma integral que permite a los organizadores de eventos añadir, gestionar y promocionar sus actividades de manera totalmente autónoma, facilitando la visibilidad y escalabilidad de sus eventos.
Buscafiesta.es no solo conecta a los organizadores con su público objetivo, sino que también ofrece herramientas de marketing y análisis que ayudan a maximizar el impacto de cada evento. Ya sea para una fiesta local, un concierto multitudinario o un evento corporativo, Buscafiesta.es es la solución definitiva para hacer de cada evento un éxito rotundo.
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...micarnavaltupatrimon
Mi Carnaval es la plataforma que permite conectar al usuario con la cultura y la emoción del Carnaval de Blancos y Negros en la ciudad de Pasto, esta plataforma brinda una amplia oferta de productos, servicios, tiquetería e información relevante para generarle valor al usuario, además, la plataforma realiza un levantamiento de datos de los espectadores que se registran, capturando su actividad e información relevante para generar la analítica demográfica del evento en tiempo real, con estos datos se generan modelos predictivos, que permiten una mejor preparación y organización del evento, de esta manera ayudando a reducir la congestión, las largas filas y, así como a identificar áreas de alto riesgo de delincuencia y otros problemas de seguridad.
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...micarnavaltupatrimon
Mi Carnaval es la plataforma que permite conectar al usuario con la cultura y la emoción del Carnaval de Blancos y Negros en la ciudad de Pasto, esta plataforma brinda una amplia oferta de productos, servicios, tiquetería e información relevante para generarle valor al usuario, además, la plataforma realiza un levantamiento de datos de los espectadores que se registran, capturando su actividad e información relevante para generar la analítica demográfica del evento en tiempo real, con estos datos se generan modelos predictivos, que permiten una mejor preparación y organización del evento, de esta manera ayudando a reducir la congestión, las largas filas y, así como a identificar áreas de alto riesgo de delincuencia y otros problemas de seguridad.
4. ¿De qué va esto?
❖ Unit testing
❖ PHPUnit
❖ Test Doubles
❖ Mockery
5. DISCLAIMER
❖ Esta es mi manera de hacer las cosas,
seguro que las hay mejores.
❖ No soy un experto en testing, pero a
veces hago tests ;).
❖ Esto no trata de TDD, aunque es posible
que el término aparezca en más de una
ocasión.
6. Unit Test
Herramienta que nos permite comprobar el correcto funcionamiento
de una unidad de código. Esto sirve para asegurar que cada una
de las partes del sistema funciona correctamente por separado.
Debe ser:
❖ Atómico
❖ Independiente
❖ Inocuo
❖ Rápido
7. Atómico
❖ El test prueba la mínima cantidad de funcionalidad
posible .
❖ Un solo comportamiento del método o función.
❖ Distintos caminos de ejecución => un test para
cada camino
8. Independiente
❖ El resultado de la ejecución de un test no debe
depender de otros.
❖ No debe ser parte de una secuencia de tests que
deba ejecutarse en un orden determinado
9. Inocuo
❖ La ejecución de un test no debe alterar el estado del
sistema (ficheros, base de datos, etc) => no
mancha :)
❖ El resultado debe ser el mismo ya lo ejecutemos una
o mil veces => idempotente
10. Rápido
❖ Normalmente lanzaremos un gran número de tests
en cada ejecución
❖ Tener que esperar resulta improductivo y aburrido
=> no haríamos test (menos de los que ya hacemos
:P)
❖ Un test unitario debería ejecutarse en una pequeña
fracción de segundo
11. Características ATRIP
❖ Automatic: pueden ser corridos mediante un simple comando.
❖ Thorough (minucioso): cuanto más testemos mejor.
❖ Repeatable: podemos ejecutarlo una y mil veces con el
mismo resultado.
❖ Independant: el resultado de un test no debe depender de
otros.
❖ Professional: debemos ser igual de exigentes al escribir los
tests de lo que lo somos al escribir nuestra lógica de negocio
(prohibidas ñapas en los tests)
13. Un poco de terminología
❖ SUT: Subject/System Under Test.
❖ Colaboradores: objetos que interactúan con el
SUT y que necesita para implementar su
funcionalidad.
❖ Fixtures: Algo así como los elementos de contexto,
datos u objetos que necesitamos para construir el
escenario que requiere el test.
14. Anatomía de un unit test:
AAA
❖ Arrange: configuración y/o carga de fixtures,
instanciar colaboradores, etc.
❖ Act: ejercitar la funcionalidad que queremos
testear.
❖ Assert: afirmar que el estado es el esperado
15. PHPUnit
❖ Versión para php de los frameworks xUnit
❖ Creado por Sebastian Bergman
❖ Estándar de facto en php
❖ https://phpunit.de/
17. TestCase
❖ Los tests se organiza en clases que heredan de la clase
PHPUnit_Framework_TestCase
❖ Cada unit test es un método de la clase
❖ Para que un método sea considerado un test, su nombre debe llevar el
sufijo test o debe estar marcado con la anotación @test
18. setUp() y tearDown()
❖ setUp(): método que se ejecuta antes de cada test,
pude servirnos para la fase de arrangement.
❖ tearDown(): método que se ejecuta después de
cada test, puede utilizarse para labores de limpieza
21. Organización de los tests
❖ Fichero de configuración:
❖ Sistema de archivos:
• phpunit.xml.dist
• phpunit.xml
22.
23. Mocks
❖ Son objetos que imitan a otros objetos de nuestro sistema y
que utilizamos en su lugar a la hora de hacer tests => “Test
Doubles”
❖ Suelen reemplazar a los colaboradores en los tests unitarios
❖ En ocasiones pueden incluso reemplazar al SUT!!
❖ Permiten aislar la funcionalidad del SUT de la de los
colaboradores
❖ Facilitan la configuración del escenario del test
❖ Permiten que los tests unitarios sean rápidos
25. ¿Todos los Test Doubles
son Mocks?
❖ No
❖ Mock es una palabra empleada en el lenguaje
informal para referirse a los test doubles en
general.
❖ Existen varios tipos específicos de test doubles.
❖ Los mocks son un tipo específico de test double
❖ Vamos a verlos!
26. Dummies
❖ Es un test doble que sólo se usa para rellenar
parámetros de un constructor o método
❖ Nunca es usado dentro del la funcionalidad del SUT
que vamos a ejercitar (al menos en el camino de
ejecución que vamos a testear)
❖ En teoría sus métodos deben devolver NULL (si lo
generamos a mano implementando una interface)
❖ Generalmente implementarán una interface
27. Dummies
Algunos ejemplos robados de http://php-and-symfony.matthiasnoback.nl/2014/07/test-doubles/
❖ Dummies con phpunit:
❖ Ejemplo con mockery:
28. Stubs
❖ Son test doubles que devuelve un valor fijo
predeterminado en las llamadas a sus métodos
❖ No tiene en cuenta los argumentos pasados a los
métodos (no se verifican)
❖ No tiene en cuenta el número de llamadas
realizadas a los métodos
30. Fakes
❖ Son una especie de stubs con cierta lógica distinta de la
verdadera lógica del colaborador al que imita y normalmente
más ligera
❖ Suelen emplearse cuando el SUT depende de un colaborador
que no está disponible, es lento o simplemente dificulta el test
❖ Tampoco tiene en cuenta el número de llamadas a los métodos
❖ No realiza verificación de parámetros
❖ Pueden volverse tan complicados que requieran sus propios
tests unitarios
32. Spies
❖ Es una especie de fake o stub que que recaba
información en las llamadas realizadas a sus
métodos y permite inspeccionarla después
❖ Puede por ejemplo registrar qué métodos han sido
llamados, número de veces, parámetros recibidos,
etc.
34. Mocks
❖ Son un tipo muy especial de test double
❖ Se parece a los spies en el sentido de que registran
las llamadas realizadas y los parámetros pasados
❖ Es mucho más potente que un spy
❖ Permite algo que el resto no: validación del
comportamiento o interacción
35. Mocks
❖Permite definir un conjunto de expectativas para validar:
• Llamadas a los métodos
• Parámetros pasados: número, tipo y valor
• Número de veces llamado: exacto, mínimo, máximo
• Orden de las llamadas
❖Pueden actuar como stubs devolviendo valores
❖Existen un gran número de librerías que permiten generar
mocks de objetos (o interfaces) al vuelo, en php: phpunit,
mockery, prophecy, fake, etc.
37. To mock or not to mock?
❖ Los mocks son una herramienta muy potente y su uso tiene sus pros y sus
contras
❖ Su uso puede llevar a sobrespecificación y dar lugar a tests frágiles
❖ El uso o no de los mismos permite diferenciar dos tipos de validación:
• Validación del estado: propiedades de objetos, valores devueltos, etc.
• Validación del comportamiento o interacción: llamadas a métodos,
número de veces, orden, argumentos, etc.
❖ Esto a su vez da lugar a dos estilos de TDD:
• Classicist TDD (Chicago School): basado en la validación del estado
• Mockist TDD (London School): basado en la validación del
comportamiento
38. Classic TDD vs Mockist TDD
❖ TDD con mocks permite seguir un diseño outside-in:
• Se empieza creando un test para la capa más externa del sistema y se
mockean lo colaboradores
• Posteriormente se desarrollan tests para los colaboradores
• Así sucesivamente se van descubriendo los objetos del sistema y su api
❖ TDD clásico suele seguir un diseño middle-out:
• Se elige una característica del dominio por la que comenzar la
implementación
• Se avanza desarrollando el resto de objetos del dominio necesarios para
el funcionamiento de dicha característica
• Una vez desarrollada se construye la capa superior
39. Classic TDD vs Mockist TDD
❖ El uso de mocks suele hace que la fase de preparación del tests sea
más costosa ya que hay que definir los mocks y sus expectativas
❖ En el TDD clásico se suele reutilizar el código de configuración
entre varios tests, este suele ir el método setUp
❖ Un fallo en un objeto de un sistema con mocks causará fallos sólo en
los tests del objeto
❖ Un fallo en un objeto de un sistema clásico puede provocar fallos en
los tests de todos los objetos que tienen al objeto como colaborador
=> puede ser complicado localizar el fallo
❖ Hacer tests de granularidad fina minimizará este problema
❖ Como ventaja los tests clásicos comprueban la integración real de
los objetos del sistema
40. Classic TDD vs Mockist TDD
❖ Los tests con mocks están muy acoplados a la
implementación del SUT => cambios en la
implementación provocarán ruptura de los tests
❖ Los tests clásicos sólo se preocupan del estado,
da igual cual sea la implementación si el
resultado es el esperado
❖ La refactorización del código testado con mocks
conllevará un trabajo importante de refactorización
de los tests
41.
42. Mockery
❖ Librería php que nos permite crear mocks al vuelo
❖ https://github.com/padraic/mockery
❖ http://docs.mockery.io/en/latest/
❖ Instalación:
$ composer require mockery/mockery
43. Integración con phpunit
public function tearDown() {
Mockery::close();
}
<listeners>
<listener class="MockeryAdapterPhpunitTestListener"></listener>
</listeners>
❖ En el fichero de configuración:
❖ En cada test case:
❖ Si no hacemos esto no se validarán las expectativas
44. Mockeando
$mock = Mockery::mock(‘foo');
// Mock llamado “foo”
$mock = Mockery::mock(array('foo'=>1,'bar'=>2));
// Mock sin nombre con array de espectativas
$mock = Mockery::mock('foo', array('foo'=>1,'bar'=>2));
// Mock “foo” con espectativas
$mock = Mockery::mock('stdClass');
// Mockeando clases
$mock = Mockery::mock(‘PSRLogLoggerInterface’);
// Mockeando interfaces
$mock = Mockery::mock('stdClass, MyInterface1, MyInterface2');
// Mockeando una clase e implementando interfaces
45. Definiendo espectativas
• shouldReceive(method_name)
// El método debe ser llamado
• shouldReceive(method1, method2, ...)
//Varios métodos
• shouldReceive(array('method1'=>1, 'method2'=>2, …))
// Los métodos deben ser llamados y devolverán estos valores
• with(arg1, arg2, ...) / withArgs(array(arg1, arg2, ...))
// validando los parámetros recibidos
• withAnyArgs(), withNoArgs() //…
• andReturn(value) / andReturn(value1, value2, ...)
// estableciendo valores devueltos en la llamada / llamadas
• andReturnNull() / andReturn([NULL]) / andReturnValues(array) /
andReturnUsing(closure, ...)
46. Definiendo espectativas
• andThrow(Exception) / andThrow(exception_name, message)
// lanzando excepciones en la llamada
• andSet(name, value1) / set(name, value1)
// establecer valor de atributos en la llamada
• passthru() // llama a la verdadera implementación del método
• zeroOrMoreTimes() / once() / twice() / times(n) / never() /
atLeast() / atMost() / between(min, max)
// estableciendo el número de llamadas: exacto, mínimo, máximo, entre
• ordered() / ordered($group)
// define el orden de llamadas o el orden dentro de un grupo
• globally() // el orden se entre todos los mocks, no sólo el actual
• byDefault() // define expectativas por defecto, que puden ser
sobreescritas en los tests concretos
47. Validando argumentos
• with(‘some-value’) // con un valor concreto
• with(Mockery::any()) OR with(anything()) // cualquier valor
• with(Mockery::type('resource')) OR with(resourceValue()) OR
with(typeOf(‘resource')) // con un tipo concreto
• with(Mockery::on(closure)) // validando mediante un closure
• with('/^foo/') OR with(matchesPattern(‘/^foo/')) // regexp
• with(Mockery::ducktype('foo', ‘bar')) //cualquier objeto que
contenga los métodos indicados
• with(Mockery::mustBe(2)) OR with(identicalTo(2)) // ===
• with(Mockery::not(2)) OR with(not(2)) // negando
• with(Mockery::anyOf(1, 2)) OR with(anyOf(1,2)) // varias opciones
48. Validando argumentos
• with(Mockery::notAnyOf(1, 2)); // que no esté entre las opciones
• with(Mockery::subset(array(0 => ‘foo’)));
// un array que contenga este subconjunto
• with(Mockery::contains(value1, value2));
// un array que contenga estos valores
• with(Mockery::hasKey(key));
// un array con una clave
• with(Mockery::hasValue(value));
// con un valor
49. Partial Mocks
• $mock = Mockery::mock(‘MyClass[foo, bar]’);
Método tradicional, mockea los métodos foo y bar de la clase,
hay que definir su comportamiento mediante expectativas.
• $mock = Mockery::mock(‘MyClass')->makePartial();
Método pasivo, las llamadas son enviadas a los métodos originales,
excepto si se han definido expectativas para el método.
• $mock = Mockery::mock(new MyClass);
Mock parcial con proxy, crea un proxy que intercepta las llamadas en
lugar de heredar del objeto a mockear, esto permite mockear clases
declaradas “final” o con métodos “final”. El inconveniente es que no
validará los type hints ya que no extiende la clase a mockear.
❖ Permiten mockear sólo algunos métodos de los objetos
50. Y más en la documentación…
❖ Mockear atributos públicos
❖ Métodos estáticos
❖ Conservar el paso de parámetros por refencia
❖ Mockear cadenas de Demeter
❖ Grabación de interacciones con objetos reales
❖ …