pruebas unitarias en profundidad - danysoft · 9º encuentro danysoft en microsoft | | 902 123146...
TRANSCRIPT
![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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022050903/6013cd53527263085b133ffe/html5/thumbnails/31.jpg)
9º Encuentro Danysoft en Microsoft | www.danysoft.com | 902 123146