El documento presenta una introducción a las pruebas unitarias. Explica que las pruebas unitarias automatizan la validación de unidades de código para verificar su funcionamiento. Luego describe algunos frameworks populares como JUnit, tipos comunes de pruebas, y patrones como el uso de dobles para aislar dependencias. Finalmente, identifica algunos desafíos comunes como el estado global, las APIs engañosas y el código no testable, y ofrece soluciones como inyección de dependencias.
Slides for my talk in FrontFest 2018 (Madrid, Feb 17). It's a technical comparison of the change detection mechanism as implemented in AngularJS, React, Angular2 and VueJS
See demos at https://github.com/jabadia/frontfest-frameworks-demos
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAVíctor Bolinches
02/03/2017
Charla Universidad Politécnica de Valencia - https://www.upv.es/
Asingnatura : Auditoria, Calidad y Gestion de Sistemas de Información (ACG)
Máster Universitario en Ingeniería Informática - https://www.upv.es/titulaciones/MUIINF/
Slides for my talk in FrontFest 2018 (Madrid, Feb 17). It's a technical comparison of the change detection mechanism as implemented in AngularJS, React, Angular2 and VueJS
See demos at https://github.com/jabadia/frontfest-frameworks-demos
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAVíctor Bolinches
02/03/2017
Charla Universidad Politécnica de Valencia - https://www.upv.es/
Asingnatura : Auditoria, Calidad y Gestion de Sistemas de Información (ACG)
Máster Universitario en Ingeniería Informática - https://www.upv.es/titulaciones/MUIINF/
Slides de la octava clase del curso de Java SCJP dictado en la Universidad Nacional de Centro de La Provincia de Buenos Aires.
Contenido:
1. Ejemplo de generics vs. arrays
2. Inner classes
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Ignacio Martín
Introducción a React.js + técnicas y conceptos útiles, como aplicaciones universales (isomórficas) o cómo usar json schema para facilitarnos la vida al trabajar con formularios.
Argentesting 2018 - Introducción a la automatización de pruebas con tecnologí...Argentesting
Taller ofrecido por Abel Quintana López (de Uruguay) durante la 3ra edición del Argentesting 2018
.Net es una de las tecnologías más usadas y populares en el desarrollo del software, por lo que es sumamente importante en el área de testing conocer las herramientas disponibles en el mercado que nos permiten la automatización de pruebas con esta tecnología.
Durante el taller analizaremos las últimas herramientas y tecnologías (actualizadas del 2018) para la automatización de pruebas con .Net y estaremos viendo cómo integrarlas para crear la base de un framework de pruebas automatizadas (UI) con funcionalidades como: Reportes Ejecución en paralelo Manejo de datos Visual testing.
El objetivo de este taller es brindarle a la audiencia el conocimiento necesario para lograr automatizaciones de pruebas exitosas en .Net.
Se analizaran herramientas como NUnit3, Selenium WebDriver para .Net, ExtentReports, entre otras.
Requerimientos
No hay máquinas en el aula. Cada asistente debe llevar su propia notebook con: Sistema operativo Window con Visual Studio instalado.
El software con que vamos a estar trabajando es Visual Studio (preferentemente 2017), en este caso no nos serviría Visual Studio Code.
Abel Quintana López
https://www.linkedin.com/in/abel-quintana-lopez-371a31b9/
Transparencias de la charla con la que participamos en las III Jornadas de Java de Alicante.
En las transparencias se muestran algunas herramientas para implantar metodologías ágiles en Java y se comentan algunas anécdotas e historias de diferentes implantaciones.
Estas son las slides que utilicé en la charla de la reunión de Septiembre de 2014 del GDG de Madrid.
Desde hace tiempo, los desarrolladores venimos utilizando scripts para automatizar y facilitarnos la construcción automática de nuestros proyectos.
En los intentos de estandarización de esos Scripts, la primera herramienta fue Ant, muy flexible, pero muy tediosa por lo verboso y por que siempre había que empezar desde cero.
La llegada de Maven supuso una cierta convención en las tareas y fases de construcción de un proyecto. Pero también incluía una tremenda facilidad para la gestión de librerías y dependencias. A cambio, impone una cierta rigidez en la estructura del script.
Gradle ha venido a buscar lo mejor de los dos mundos: la fexibilidad de Ant, la convención de Maven, la gestión de librerías de Ivy o Mvn.... y todo ello con un lenguaje de scripting más parecido al código que al XML en el que se basan las dos precedesoras.
Desde hace meses, Google ya ha apostado por Gradle como sistema de construcción de proyectos para Android en su Android Studio.
En esta charla, haremos una introducción a Gradle como herramienta de construcción de proyectos.
Charla en Cartuja.NET sobre Mercurial, TDD en .NET con NUnit, MSTest, XUnit e Integración continua con Teamcity.
Impartida el 13 de junio de 2013 en Cartuja.NET, Sevilla.
Gulp js php sevilla 28 septiembre 2016Agencia INNN
Presentación que nuestro compañero Juan Luis García (@JuanluGarcíaB) realizó para evento de la comunidad PHP Sevilla titulado ‘Gulp & Deployer working with Symfony’.
Este evento se celebró el pasado 28 de septiembre de 2016 en las oficinas de Innn. #SomosINNN #PHPSevilla
Slides de la octava clase del curso de Java SCJP dictado en la Universidad Nacional de Centro de La Provincia de Buenos Aires.
Contenido:
1. Ejemplo de generics vs. arrays
2. Inner classes
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Ignacio Martín
Introducción a React.js + técnicas y conceptos útiles, como aplicaciones universales (isomórficas) o cómo usar json schema para facilitarnos la vida al trabajar con formularios.
Argentesting 2018 - Introducción a la automatización de pruebas con tecnologí...Argentesting
Taller ofrecido por Abel Quintana López (de Uruguay) durante la 3ra edición del Argentesting 2018
.Net es una de las tecnologías más usadas y populares en el desarrollo del software, por lo que es sumamente importante en el área de testing conocer las herramientas disponibles en el mercado que nos permiten la automatización de pruebas con esta tecnología.
Durante el taller analizaremos las últimas herramientas y tecnologías (actualizadas del 2018) para la automatización de pruebas con .Net y estaremos viendo cómo integrarlas para crear la base de un framework de pruebas automatizadas (UI) con funcionalidades como: Reportes Ejecución en paralelo Manejo de datos Visual testing.
El objetivo de este taller es brindarle a la audiencia el conocimiento necesario para lograr automatizaciones de pruebas exitosas en .Net.
Se analizaran herramientas como NUnit3, Selenium WebDriver para .Net, ExtentReports, entre otras.
Requerimientos
No hay máquinas en el aula. Cada asistente debe llevar su propia notebook con: Sistema operativo Window con Visual Studio instalado.
El software con que vamos a estar trabajando es Visual Studio (preferentemente 2017), en este caso no nos serviría Visual Studio Code.
Abel Quintana López
https://www.linkedin.com/in/abel-quintana-lopez-371a31b9/
Transparencias de la charla con la que participamos en las III Jornadas de Java de Alicante.
En las transparencias se muestran algunas herramientas para implantar metodologías ágiles en Java y se comentan algunas anécdotas e historias de diferentes implantaciones.
Estas son las slides que utilicé en la charla de la reunión de Septiembre de 2014 del GDG de Madrid.
Desde hace tiempo, los desarrolladores venimos utilizando scripts para automatizar y facilitarnos la construcción automática de nuestros proyectos.
En los intentos de estandarización de esos Scripts, la primera herramienta fue Ant, muy flexible, pero muy tediosa por lo verboso y por que siempre había que empezar desde cero.
La llegada de Maven supuso una cierta convención en las tareas y fases de construcción de un proyecto. Pero también incluía una tremenda facilidad para la gestión de librerías y dependencias. A cambio, impone una cierta rigidez en la estructura del script.
Gradle ha venido a buscar lo mejor de los dos mundos: la fexibilidad de Ant, la convención de Maven, la gestión de librerías de Ivy o Mvn.... y todo ello con un lenguaje de scripting más parecido al código que al XML en el que se basan las dos precedesoras.
Desde hace meses, Google ya ha apostado por Gradle como sistema de construcción de proyectos para Android en su Android Studio.
En esta charla, haremos una introducción a Gradle como herramienta de construcción de proyectos.
Charla en Cartuja.NET sobre Mercurial, TDD en .NET con NUnit, MSTest, XUnit e Integración continua con Teamcity.
Impartida el 13 de junio de 2013 en Cartuja.NET, Sevilla.
Gulp js php sevilla 28 septiembre 2016Agencia INNN
Presentación que nuestro compañero Juan Luis García (@JuanluGarcíaB) realizó para evento de la comunidad PHP Sevilla titulado ‘Gulp & Deployer working with Symfony’.
Este evento se celebró el pasado 28 de septiembre de 2016 en las oficinas de Innn. #SomosINNN #PHPSevilla
La Responsabilidad Social Empresarial es el: “Hacer negocios basados en principios ético y apegados a la ley. La empresa (no el empresario) tiene un rol ante la sociedad, ante el entorno en el cual opera.
La decisión de hacer negocios rentables, de forma ética y basados en la legalidad es realmente estrategico
A Expertise Inteligência e Pesquisa de Mercado realizou um estudo sobre as redes sociais para identificar o comportamento dos usuários e formas de se relacionar com pessoas e marcas.
O projeto Redes Sociais focou:
- Levantar dados demográficos dos internautas;
- Identificar comportamento de utilização das redes sociais;
- Segmentar usuários por comportamento de utilização das redes sociais;
- Analisar o relacionamento com marcas através das redes sociais.
En esta presentación se describen las buenas prácticas para las pruebas unitarias y funcionales desde el punto de vista de la experiencia adquirida en mi lugar de trabajo
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. AND IT'S TRUE!
In this talk given at JBCNConf 2015 in Barcelona, we will see how we use Netty at Trovit since 2013, what brought to us and how it opened our minds. We will share tips that helped us to learn more about Netty, some performance tricks and all things that worked for us.
Google Guava - Core libraries for Java & AndroidJordi Gerona
Talk at GDG DevFest Barcelona 2013.
The Guava project contains several of Google's core libraries that we rely on in our Java-based projects: collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, and so forth.
2. roadmap Definición Primer test Excusas Tipos de tests <3 Mockito Código testeable Q & A #bcngtug http://bitbucket.org/jordi9/gtug-unit-testing http://slideshare.net/giro9
3. definición Código (método) que ejecuta un otro código para comprobar su validez. ... todos hemos escrito unit tests (o algo parecido) características Automático y repetible Fácil de implementar. Cualquiera puede ejecutarlo "apretando un botón" Debe ser rápido (<1ms)
4. nuestro primer test frameworks xUnit family: SUnit, JUnit, NUnit, PHPUnit... Nos facilitan como escribir un test, ejecutarlo y obtener resultados. (ejemplos en JUnit) esquema básico de un test Class Under Test (CUT, SUT, @Unit ...) Precondición - Ejecución - Postcondición postcondición...? Assert assertTrue(boolean); assertEquals(expected, actual); (...) Hamcrest assertThat(foo, is("foo")); assertThat(bar, is(not("foo"))); assertThat(list, hasSize(9));
6. test con junit public class StringsTest { @Test public void stripAllHTMLForAGivenText() { String html = "<a>Link</a>"; assertThat(Strings.stripHTML(html), is("Link")); } } public class Strings { public static String stripHTML(String input) { return input.replaceAll("</?+(b)[ˆ<>]++>", ""); } } unit test
9. unit test...? // Class under test CreditCardProcessor creditCardProcessor; @Test public void chargeCreditCard() { creditCardProcessor = new CreditCardProcessor(); CreditCard c = new CreditCard("9999 0000 7777", 5, 2009); creditCardProcessor.charge(c, 30.0); assertThat (creditCardProcessor.balance(c), is(-30.0)); } public CreditCardProcessor() { } Mi tarjeta tenía 30 Euros menos!
10. test con dependencias / mocks Dependencias falsas: mocks frameworks fases "expect" - "replay" - "verify"
12. preparando un test @Before @After Se ejecutan por cada test unitario public class DatabaseTest { @Before public void prepareFakeDatabase() {} @After public void cleanupFakeDatabase() {} } @BeforeClass @AfterClass Se ejecutan una vez por un conjunto de test public class DatabaseTest { @BeforeClass public static void prepareRealDatabase() {} @AfterClass public static void cleanupRealDatabase() {} }
13. más opciones junit testeando excepciones @Test(expected=IllegalArgumentException.class) public void emptyInputShouldRaiseAnException() { Strings.stripHTML(""); } tests con timeout @Test(timeout=1000) public void timeoutFirst() { Strings.veryLongMethod("foo"); } ignorar un test @Ignore("Some very good reason") @Test(timeout=1000) public void timeoutFirst() { Strings.veryLongMethod("foo"); }
15. detectar código no testeable new 's encapsulados Coste de construcción Estado global API's que engañan
16. new 's encapsulados class House { Kitchen kitchen = new Kitchen(); Bedroom bedroom; House() { bedroom = new Bedroom(); } }
17. new 's encapsulados class House { Kitchen kitchen = new Kitchen(); Bedroom bedroom; House() { bedroom = new Bedroom(); } } class HouseTest { @Test public void thisIsReallyHard() { House house = new House(); // Oops... y si quiero utilizar otra cocina u otra // habitación? } }
18. new 's encapsulados fixed class House { Kitchen kitchen; Bedroom bedroom; @Inject // Guice! House(Kitchen kitchen, Bedroom bedroom) { this.kitchen = kitchen; this.bedroom = bedroom; } }
19. new 's encapsulados fixed class House { Kitchen kitchen; Bedroom bedroom; @Inject // Guice! House(Kitchen kitchen, Bedroom bedroom) { this.kitchen = kitchen; this.bedroom = bedroom; } } class HouseTest { @Test public void thisIsCoolAndFlexible() { Kitchen kitchen = new FooKitchen(); Bedroom bedroom = new InexpensiveBedroom(); House house = new House(kitchen, bedroom); // yay! } }
20. Coste de construcción class Car { Engine engine; Car(File file) { String model = readEngineModel(file); // expensive method engine = new EngineFactory().create(model); } } Para instanciar un objeto: Tienes que navegar por todo lo que se haga en la constructora. No puedes sobrescribirla.
21. Coste de construcción class Car { Engine engine; Car(File file) { String model = readEngineModel(file); // expensive method engine = new EngineFactory().create(model); } } class CarTest { public void noSeamForFakeEngine() { // Aggh! Ficheros en los unit tests... File file = new File("engine.config"); Car car = new Car(file); // Quiero utilizar otro motor pero no puedo por culpa // de la fábrica... } } Para instanciar un objeto: Tienes que navegar por todo lo que se haga en la constructora. No puedes sobrescribirla.
22. Coste de construcción class Car { Engine engine; Car(Engine engine) { this.engine = engine; } } @Provides // más Guice! Engine providesEngine(EngineFactory engineFactory, @EngineModel String model) { return engineFactory.create(model); }
23. Coste de construcción class Car { Engine engine; Car(Engine engine) { this.engine = engine; } } @Provides // más Guice! Engine providesEngine(EngineFactory engineFactory, @EngineModel String model) { return engineFactory.create(model); } @Test public void nowWeHaveACleanDesign() { Engine fakeEngine = new FakeEngine(); Car car = new Car(fakeEngine); } Hacer el mínimo trabajo posible en la constructora
24. Estado global Repetir el mismo proceso y obtener un resultado diferente... ugh! síntomas Orden de los tests importa (prohibido!) No se pueden ejecutar los tests en paralelo ejemplos En la propia JVM tenemos malos ejemplos: System.currentTime(); new Date(); Math.random() Testear el código anterior es muy difícil.
25. APIs engañosas Dependencias ocultas... recuperemos el ejemplo de antes @Test public void chargeCreditCard() { CreditCard cc = new CreditCard("9999 0000 7777", 5, 2009); cc.charge(30.0); } java.lang.NullPointerExpection at org.donky.gtug.C reditCard.charge()
26. APIs engañosas @Test public void chargeCreditCard() { CreditCardProcessor.init(); CreditCard cc = new CreditCard("9999 0000 7777", 5, 2009); cc.charge(30.0); } java.lang.NullPointerExpection at org.donky.gtug.C reditCardProcessor.init()
27. APIs engañosas @Test public void chargeCreditCard() { OfflineQueue.start(); CreditCardProcessor.init(); CreditCard cc = new CreditCard("9999 0000 7777", 5, 2009); cc.charge(30.0); } java.lang.NullPointerExpection at org.donky.gtug.OfflineQueue .start()
28. APIs engañosas @Test public void chargeCreditCard() { Database.connect(...); OfflineQueue.start(); CreditCardProcessor.init(); CreditCard cc = new CreditCard("9999 0000 7777", 5, 2009); cc.charge(30.0); } La API de CreditCard nos engaña: No expone sus dependencias de manera clara. Pretende no necesitar la CreditCardProcessor pero lo hace. Aun pierdo 30 Euros! Si tu código depende del orden en que se inician los Singletons... está documentado en alguna parte? Quien no se ha encontrado esto nunca?;) La solución es Dependency Injection: Te fuerza el orden correcto en tiempo de compilación.
29. una solución mejor @Test public void chargeCreditCard() { db = new Database(...); queue = new OfflineQueue( db ); ccProc = new CreditCardProcessor( queue ); CreditCard cc = new CreditCard( ccProc , "9999 0000 7777"); cc.charge(30.0); }
30. muchísimas más cosas! más frameworks DbUnit WebDriver / Selenium 2 MockRunner Android: ActivityInstrumentationTestCase ActivityUnitTestCase metodologías Test Driven Development (<3) Acceptance Test utilidades Test coverage: Cobertura / Clover Testability Explorer