Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146...

31
9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146 Pruebas unitarias en profundidad Luis Alfonso Rey | 9º Encuentro Danysoft en Microsoft

Transcript of Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146...

Page 1: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

Pruebas unitarias en profundidadLuis Alfonso Rey | 9º Encuentro Danysoft en Microsoft

Page 2: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Lo que ya sabemos• Algunas cosas nuevas• Despacito y buena letra• Herencia de familia

Agenda

Page 3: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

Page 4: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Qué es una prueba unitaria y cuales deben ser sus características principales

• Qué son una pruebas de integración• Qué es regresión• Cómo hacer pruebas con Visual Studio

…Pero por si acaso

Lo que ya sabemos

Page 5: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Código que invoca código y establece condiciones de corrección

• Deben ser...• Automatizables y repetibles• Fáciles de implementar• Reutilizables en el futuro• Ejecutables por cualquiera• Ejecutables pulsando un botón• Lo más rápidas posible• Solo un aspecto concreto

Prueba Unitaria

Page 6: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Una vez descubierto un error……Se corrige pero puede volver a ocurrir

• Error de regresión• Creemos pruebas para que no vuelva a suceder

Prueba de regresión

Page 7: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Como las pruebas unitarias son:• Repetibles• Reutilizables• Ejecutables pulsando un botón

• Podemos dejar al sistema que las ejecute y luego nos informe del resultado

Automatización de pruebas

Page 8: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Pruebas que se efectúan en dos o más módulos dependientes entre si

• Es una prueba que puede tener efectos inesperados en otras partes

• Requiere análisis

Pruebas de integración

Page 9: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• La integración es buena pero…• Ha de ser repensada a cada modificación• Normalmente el ejecutor ha de estar informado• No suelen ser rápidas ni fáciles de ejecutar• …No suele ser automatizable

Automatización vs. Integración

Page 10: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Framework de pruebas que incluye• Proyectos• Arneses y pruebas• Métricas• Ejecución automatizada• Integración con sistemas de información

Pruebas unitarias en VS

Page 11: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

Page 12: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Explorador de pruebas unitarias• Soporte para frameworks

externos• Mejoras de rendimiento• Soporte 64Bit • Pruebas asíncronas• Framework de para fakes• Mejoras en la cobertura de

código• Integración continua sin servidor

Novedades de Visual Studio 11 Beta

Pero…Perdemos la intragración con el IDE

Page 13: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

Page 14: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

Page 15: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Mas atributos en VS test framework• Test Driven Development• Stubs• Mocks

Algunas cosas nuevas

Page 16: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Clásicos TestClass, TestMethod, DataSource• Inicialización AssemblyInitialize, ClassInitialize,

TestInitialize• Finalización AssemblyCleanup, ClassCleanup, TestCleanup• Clasificación Owner, DeploymentItem, Description,

HostType, Ignore, Priority, TestProperty, WorkItem• TFS CssIteration, CssProjectStructure

Atributos de pruebas

Page 17: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Primero Prueba luego codifica• Pasos

1. Crea una prueba que falla2. Crea el código para satisfacerla3. Refactoriza si es necesario

Test Driven Development

Page 18: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Remplazo de una dependencia externa, evitando tratar directamente con ella

Stubs

class CardReader{

public bool IsCardNumberValid (string number){

return SecuritySystem.IsCardNumberValid( number);}

}

[TestClass()]class CardReaderTest{

[TestMethod()]public bool IsCardNumberValidTest (){

string number = "99999999";CardReader reader = new CardReader();Assert.IsTrue(reader.IsCardNumberValid( number));

}}

Page 19: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Remplazamos en pruebas por stub

Stubs

Constructor Injectionclass CardReader{

ISecuritySystem SecuritySystem;public CardReader ( ISecuritySystem system){

SecuritySystem = system}

}

Property Injection[TestClass]class CardReaderTest{

[TestMethod]public void IsCardNumberValidTest (){

string number = "99999999";CardReader reader = new CardReader();reader.SecuritySystem = New

FakeSecuritySystem();Assert.IsTrue(reader.IsCardNumberValid( number));

}}

Factory Class[TestClass]class CardReaderTest{

[TestMethod]public void IsCardNumberValidTest (){

string number = "99999999";CardReader reader = new CardReader();reader.SecuritySystem = SecuritySystemFactory.Create();Assert.IsTrue(reader.IsCardNumberValid( number));

}}

Directivas de compilación[TestClass]class CardReaderTest{

[TestMethod]public void IsCardNumberValidTest (){

string number = "99999999";CardReader reader = new CardReader();#if DEBUGreader.SecuritySystem = FakeSecuritySystemFactory.Create();#endifAssert.IsTrue(reader.IsCardNumberValid( number));

}}

Page 20: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Diferentes niveles de abstracción• Constructor Injection

• Pocas referencias• Obligatorias

• Property Injection• Optativas

• Factory Class• Clases sin constructores públicos

• Directivas de Compilación• Factory class falsa

Stubs

Page 21: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• State-based Testing, probar el resultado por el estado final de un objeto

• Interaction Testing, probar como los objetos intercambian información

• Mock object un objeto falso que decide el resultado de la prueba en función de las interacciones del sistema con él

• Solo uno por test si probamos un aspecto

Mocks

Page 22: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Con Stub la clase falla en la prueba

• El Mock falla la prueba

Mock vs. Stub

Objeto Stub

Prueba

Objeto Stub

Prueba

class CardReader{

public ISecurityDoor Door;public CardReader(ISecurityDoor door){

Door = door;}public void OpenDoor(){

Door.Open();}

}

[TestClass]class CardReaderTest{

[TestMethod]public void OpenDoorTest (){ ISecurityDoor door = new

FakeSecurityDoor()CardReader reader = new

CardReader(door);CardReader.OpenDoor();Assert.IsTrue(door.IsOpen);

}}

Objeto Mock

Prueba

Objeto Mock

Prueba

Page 23: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Costosos de implementar• Difícil si las clases tienen interfaz complejo• Mantener el estado es pesado y laborioso• Difíciles de reutilizar

Por eso existen varios frameworks

Mocks y Stubs manuales

Page 24: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Nmock• Moq• Typemock Isolator• Rhino MocksEtc…

Algunos frameworks

Page 25: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

Page 26: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Las pruebas son buenas pero sin organización pueden resultar inútiles

• Ejecución frecuente• Mantenimiento• Clasificación por impacto y tiempo de ejecución• Refactorización de pruebas y si es necesario API

Despacito y buena letra

Page 27: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

• Las pruebas fáciles de integrar en proyectos nuevos y el código heredado ¿qué?

• Difícil pero posible• Para empezar señalar las partes necesarias• Clasificarlas, más fáciles cuanto mas orientado a función,

mas difíciles a la dependencia• Grupos sin experiencia utilizar Easy-First• Grupos con experiencia utilizar Hard-first• Si refactorización primero crear pruebas de integración

Herencia de familia

Page 28: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

Page 29: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

Gestión activos software y libros

Page 30: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146

Formación, consultoría y seminarios

Page 31: Pruebas unitarias en profundidad - Danysoft · 9º Encuentro Danysoft en Microsoft | | 902 123146 • Qué es una prueba unitaria y cuales deben ser sus características principales

9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146