pruebas unitarias en profundidad - danysoft · 9º encuentro danysoft en microsoft | | 902 123146...

Post on 27-Sep-2020

15 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Algunas cosas nuevas

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

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

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));

}}

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));

}}

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

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

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

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

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

• Nmock• Moq• Typemock Isolator• Rhino MocksEtc…

Algunos frameworks

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

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

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

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

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

Gestión activos software y libros

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

Formación, consultoría y seminarios

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

top related