SlideShare ist ein Scribd-Unternehmen logo
1 von 89
AutomateTesting Email: snahider@gmail.com Blog: http://snahider.blogspot.com Twitter: @snahider Angel Núñez Salazar
Tipos de Test Es una nomenclatura caótica y no existe una sola categoría. Alcance: Unidades, Componentes, Sistemas Etapa: Integración, aceptación, regresión Enfoque:        Performance, funcionales Visibilidad:   White / Black box El tipo de test se convierte en un atributo.
Sistema Tipos de pruebas según su alcance + Integración Unitarios - Alcance
Unit TestingAutomate Testing Email: snahider@gmail.com Blog: http://snahider.blogspot.com Twitter: @snahider Angel Núñez Salazar
Pruebas Unitarias No pruebes el auto completo si aún no sabes si funcionan los engranes.
Prueba Unitaria (Micro Test) Una prueba unitaria es un fragmento automatizado de código, escrito y mantenido por los desarrolladores, que invoca un método o función para verificar ciertas suposiciones sobre el comportamiento de una única clase.
Nuestro Objetivo Probar las unidades lógicas  o caminos que existen dentro de una clase.
Independencia (Aislamiento) Se realizan de manera separada al resto de la aplicación, de sus dependencias y no acceden a recursos del sistema. ,[object Object]
No depende de archivos de configuración.
No ejercita la clase y todas sus dependencias en simultáneo.,[object Object]
Beneficios de las pruebas unitarias Realizar cambios es mucho más sencillo. Nuevas funcionalidades no rompen las existentes. El proceso de desarrollo se vuelve más flexible. Los problemas se encuentran temprano en el ciclo de desarrollo. El diseño mejora debido a que el código es forzado a ser más desacoplado y testeable. Código que funciona ahora, funcionará en el futuro. La necesidad de pruebas manuales se reduce.
UnitTesting Frameworks Frameworks que nos proveen todos los mecanismos necesarios para ejecutar la lógica específica a nuestra prueba sin preocuparnos por la infraestructura necesaria. ,[object Object]
Java:   JUnit, TestNG, Easyb, JTiger …..
Ruby: Test::Unit, Rspec, Shoulda …..,[object Object]
Organización de un Proyecto Mantener las pruebas separadas del código de producción. Una clase de prueba por cada clase de producción. (Test Fixture per class) Proyecto de Producción Proyecto con las pruebas Referencia al proyecto de producción Test Framework
Organización de un Proyecto Mantener las pruebas separadas del código de producción. Una clase de prueba por cada clase de producción. (Test Fixture per class) Directorio de producción Directorio con las pruebas Test Framework
Creando una prueba Las pruebas se encuentran dentro de una clase marcada con un atributo Las pruebas son métodos marcados con un atributo La prueba pasa al menos que el assert falle o se produzca un error
Creando una prueba Las pruebas se encuentran dentro de una clase. Las pruebas son métodos marcados con una anotación. La prueba pasa al menos que el assert falle o se produzca un error
Asserts Métodos a través de los cuales podemos verificar el éxito o fracaso de nuestras pruebas. Múltiples sobre escrituras para verificar diversos casos. Si la verificación falla, nos devuelven un mensaje con información para poder solucionar el problema. Assert.AreEqualfailed. Expected: <2>, Actual:<0> Podemos agregar mensajes adicionales para que sean mostrados en caso el test falle. Assert.AreEqualfailed. Expected: <2>, Actual: <0>. 1+1 deberíaser 2
Ejecutando las pruebas ,[object Object]
Hot Keys:
Ejecutar las pruebas dentro del contexto actual (Ctrl+R,T)
Ejecutar todas las pruebas (Ctrl+R,A),[object Object]
Menú contextual sobre la clase/package/proyecto y seleccionar "RunAs -> Junit Test".
Hot Keys: "Run As JUnit Test" (Alt+Shift+X,T),[object Object]
Incluir las entradas/estado inicial y el resultado esperado para dichas entradas.[NombreMétodo_EstadoEnPrueba_ComportamientoEsperado] Las convenciones  nos permiten contar con reglas o plantillas que todo el equipo puede seguir para lograr un rápido entendimiento acerca de las pruebas.
Estructura de una prueba Creamos todas las precondiciones y entradas necesarias. ARRANGE Realizamos la acción del objeto que estamos probando. ACT ASSERT Verificamos los resultados esperados.
Nuestra segunda Prueba Realizar la prueba unitaria que verifique :  «El Stack no se encuentra vacío si contiene un elemento»
Don't repeat yourself Para aumentar nuestra productividad utilizaremos un snippet para las pruebas ,[object Object]
Menu: File->New->File
Categoría SnippetDesigner: Seleccionar CodeSnippet,[object Object]
Categoría Java->Editor->Templates
Click en el botón New..,[object Object]
Set Up y TearDown Métodos que nos permiten crear y limpiar datos que son comunes a todas las pruebas.  Set Up For Unit Test Unit Test Tear Down For Unit Test ,[object Object]
Tear Down (Destructor de las pruebas): Limpiar datos que afecten la ejecución entre prueba y prueba.,[object Object]
Ejemplos Set Up y Tear Down Unit Test Test Fixtures
Ejemplos Set Up y Tear Down Unit Test Test Fixtures
Probando Excepciones Forma Tradicional Utilizando Atributos
Probando Excepciones Forma Tradicional Utilizando Atributos ExceptedException Rule
EjercicioProbar una Excepción y utilizar un Set Up Crear una prueba para verificar que al obtener un elemento y el stack se encuentre vacío, se lance una excepción. Crear un método SetUp para remover el código duplicado de los test.
Propiedades de una prueba unitaria Fast: Unos cuantos milisegundos en ejecutarse. Independent: Enfocarse en una única unidad de código. Repeatable: Ejecutarse de manera repetitiva sin intervención. Self-validating: Sin necesidad de reexaminar los resultados. Transparent: Comunicar claramente lo que se busca probar.
Test DoublesAutomate Testing Email: snahider@gmail.com Blog: http://snahider.blogspot.com Twitter: @snahider Angel Núñez Salazar
Testeabilidad La testeabilidad es un atributo de calidad del códigoque permite que las pruebas automatizadas sean realizadas de manera fácil y efectiva. La testeabilidad por lo general es señal de un buen diseño. Si queremos que un código sea testeable, debemos escribir pensando en la testeabilidad. No  cualquier código puede ser probado de manera unitaria.
EjercicioRevisar las pruebas realizadas a un código "no testeable" ¿Cuál es el problema del código de producción?"Es un código muy acoplado"
¿Cuál es el problema? Las clases de alto nivel no deben depender directamente de clases de bajo nivel sino de abstracciones de estas clases.
Inversión de Dependencias Las clases de alto nivel no deben depender directamente de clases de bajo nivel sino de abstracciones de estas clases.
Inyección de Dependencias Proveer las instancias de las clases dependencia desde fuera del ámbito de la clase. Outside
EjercicioRefactorizar el código para mejorar su testeabilidad. Utilizar inyección e inversión de dependencias para desacoplar el código.
¿ Cuál es el siguiente paso ? Ahora que las clases no dependen de una implementación específica, debemos hacer que los test  decidan cual es la dependencia a usar y la inyecten a la clase que se está probando.
EjercicioModificar los test para realizar pruebas unitaras a clases con dependencias. Crear una nueva clase más simple que reemplace a la original solo para los propósitos de las pruebas.
El Mundo Real BD Other Class Other Class Act Other Class Test ClassUnder Test FileSystem Assert Other Class Other Class
¿Cuál es el problema? Responsabilidades de la clase Creación de jerarquía de objetos Lógica de Negocios
Encontrando la solución Responsabilidades de una clase externa Responsabilidades de la clase Creación de jerarquía de objetos Lógica de Negocios
Encontrando la solución Simple Class Act Simple Class Test ClassUnder Test Assert Simple Class
Test Doubles Test Double Test Double Son todos aquellos objetos que han sido creados para reemplazar a los objetos reales con el propósito de hacer pruebas
IsolationMockingFrameworks ,[object Object]
Evitar escribir código repetitivo.
.NET:  Moq,RhinoMock, Typemock
Java:  Mockito, EasyMock, Jmock
Ruby: RSpecBuilt-in, Mocha,[object Object]
Test Doubles: Stubs
Test Doubles: Stubs ,[object Object]
La prueba tiene el control sobre este test double, por lo que puede indicarle respuestas predefinidas a ciertas llamadas.
Son utilizados cuando nuestro método en prueba depende de un valor que es retornado por otro componente.,[object Object]
StateTesting VS InteractionTesting StateTesting (ResultDriven) Verificamos si un resultado final es el esperado.Ejm: que una propiedad ha cambiado su valor. InterationTesting (ActionDriven)Verificamos si una determinada acción se ha producido. Ejm: que se ha enviado un mensaje hacia otro objeto.
Test Doubles: Mocks Nos permiten verificar si un objeto ha enviado o recibido un determinado mensaje de otro objeto. (Si un objeto ha interactuado correctamente con otro objeto)
Test Doubles : Mocks ,[object Object]
El Assert ya no se ejecuta sobre la clase en prueba sino sobre el mock.
Lo usamos para probar acciones que no pueden ser observadas a través de la API pública de la clase que se está probando. ,[object Object]
Como los diferenciamos fácilmente Stub: El Test Double que permite que el test pueda terminar su ejecución. Mock: El Test Double sobre el cuál se realiza un aserto.
Explorando el API de Moq ,[object Object]
Stubbing
ArgumentMatchers
Stubbingcon excepciones
Verificar comportamiento,[object Object]
Stubbing
ArgumentMatchers
Stubbingcon excepciones
Verificar comportamiento,[object Object]
EjercicioRealizar pruebas unitarias a clases con dependencias IsEnabled debe retornar verdadero si el nivel del mensaje está antes al nivel del logger. IsEnabled debe retornar falso si el nivel del mensaje está después al nivel del logger. Writedebe enviar un email al administrador si el nivel es ERROR. Write debe escribir en el appender si el logger está habilitado.
CodeCoverage Medida de calidad del software. Valor cuantitativo que indica el número de áreas de nuestra aplicación que han sido ejercitadas por un conjunto de casos de prueba. ,[object Object]
Java:  Clover, EMMA, Cobertura
Ruby: RCov,[object Object]
Valor proporcional a la complejidad ciclomática.¿ Será suficiente pasar una única vez por un camino?
Costo vs Beneficiode las pruebas unitarias Algoritmos Código complicado – Necesita refactorizar Alto Beneficio de la prueba ≈ Código no obvio Código Trivial Coordinadores Bajo Bajo Alto Costo de la prueba ≈ Número de dependencias Steven Sanderson Blog:  http://bit.ly/lNGDjq
EjercicioMedir el CodeCoverage en una aplicación. Medir el codecoverage utilizando las herramientas integradas dentro de los IDES. Analizar los resultados e identificar las áreas que no han sido ejercidas por ninguna prueba.
¿ Como escribimos código que sea difícil de probar ?
«No hay ningún secreto en cómo escribir los tests,solo hay secretos en cómo escribir código testeable.» MiskoHevery
Como podemos mejorar la testeabilidad ,[object Object]

Weitere ähnliche Inhalte

Was ist angesagt?

Automated Web Testing Using Selenium
Automated Web Testing Using SeleniumAutomated Web Testing Using Selenium
Automated Web Testing Using SeleniumWeifeng Zhang
 
Unit and integration Testing
Unit and integration TestingUnit and integration Testing
Unit and integration TestingDavid Berliner
 
Python Testing 101 with Selenium
Python Testing 101 with SeleniumPython Testing 101 with Selenium
Python Testing 101 with SeleniumLeonardo Jimenez
 
Selenium interview-questions-freshers
Selenium interview-questions-freshersSelenium interview-questions-freshers
Selenium interview-questions-freshersNaga Mani
 
TestComplete – A Sophisticated Automated Testing Tool by SmartBear
TestComplete – A Sophisticated Automated Testing Tool by SmartBearTestComplete – A Sophisticated Automated Testing Tool by SmartBear
TestComplete – A Sophisticated Automated Testing Tool by SmartBearSoftware Testing Solution
 
Selenium interview questions
Selenium interview questionsSelenium interview questions
Selenium interview questionsgirichinna27
 
An introduction to unit testing
An introduction to unit testingAn introduction to unit testing
An introduction to unit testingAdam Stephensen
 
An Introduction to Unit Testing
An Introduction to Unit TestingAn Introduction to Unit Testing
An Introduction to Unit TestingJoe Tremblay
 
Chapter 2 - Testing Throughout the Development LifeCycle
Chapter 2 - Testing Throughout the Development LifeCycleChapter 2 - Testing Throughout the Development LifeCycle
Chapter 2 - Testing Throughout the Development LifeCycleNeeraj Kumar Singh
 
ISTQB Foundation Level Basic
ISTQB Foundation Level BasicISTQB Foundation Level Basic
ISTQB Foundation Level BasicErol Selitektay
 

Was ist angesagt? (20)

Automated Web Testing Using Selenium
Automated Web Testing Using SeleniumAutomated Web Testing Using Selenium
Automated Web Testing Using Selenium
 
Unit and integration Testing
Unit and integration TestingUnit and integration Testing
Unit and integration Testing
 
Python Testing 101 with Selenium
Python Testing 101 with SeleniumPython Testing 101 with Selenium
Python Testing 101 with Selenium
 
Unit testing
Unit testingUnit testing
Unit testing
 
Selenium Concepts
Selenium ConceptsSelenium Concepts
Selenium Concepts
 
Selenium WebDriver training
Selenium WebDriver trainingSelenium WebDriver training
Selenium WebDriver training
 
Selenium WebDriver
Selenium WebDriverSelenium WebDriver
Selenium WebDriver
 
Selenium interview-questions-freshers
Selenium interview-questions-freshersSelenium interview-questions-freshers
Selenium interview-questions-freshers
 
Java Unit Testing
Java Unit TestingJava Unit Testing
Java Unit Testing
 
TestComplete – A Sophisticated Automated Testing Tool by SmartBear
TestComplete – A Sophisticated Automated Testing Tool by SmartBearTestComplete – A Sophisticated Automated Testing Tool by SmartBear
TestComplete – A Sophisticated Automated Testing Tool by SmartBear
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Selenium interview questions
Selenium interview questionsSelenium interview questions
Selenium interview questions
 
Automation Testing by Selenium Web Driver
Automation Testing by Selenium Web DriverAutomation Testing by Selenium Web Driver
Automation Testing by Selenium Web Driver
 
An introduction to unit testing
An introduction to unit testingAn introduction to unit testing
An introduction to unit testing
 
An Introduction to Unit Testing
An Introduction to Unit TestingAn Introduction to Unit Testing
An Introduction to Unit Testing
 
Selenium Automation Framework
Selenium Automation  FrameworkSelenium Automation  Framework
Selenium Automation Framework
 
Chapter 2 - Testing Throughout the Development LifeCycle
Chapter 2 - Testing Throughout the Development LifeCycleChapter 2 - Testing Throughout the Development LifeCycle
Chapter 2 - Testing Throughout the Development LifeCycle
 
Chapter 5 - Test Management
Chapter 5 - Test ManagementChapter 5 - Test Management
Chapter 5 - Test Management
 
ISTQB Foundation Level Basic
ISTQB Foundation Level BasicISTQB Foundation Level Basic
ISTQB Foundation Level Basic
 
Software Testing or Quality Assurance
Software Testing or Quality AssuranceSoftware Testing or Quality Assurance
Software Testing or Quality Assurance
 

Andere mochten auch

Automatizacion De Pruebas De Software
Automatizacion De Pruebas De SoftwareAutomatizacion De Pruebas De Software
Automatizacion De Pruebas De SoftwareRubiano
 
Automatización de pruebas funcionales
Automatización de pruebas funcionalesAutomatización de pruebas funcionales
Automatización de pruebas funcionalesVicenç García-Altés
 
Alta automatización de pruebas de calidad de software, cambio de paradigmas
Alta automatización de pruebas de calidad de software, cambio de paradigmasAlta automatización de pruebas de calidad de software, cambio de paradigmas
Alta automatización de pruebas de calidad de software, cambio de paradigmasSoftware Guru
 
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriverPrueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriverDavid Gómez García
 
Tipos de pruebas de software
Tipos de pruebas de softwareTipos de pruebas de software
Tipos de pruebas de softwareGuillermo Lemus
 
User story testing activities 3
User story testing activities 3User story testing activities 3
User story testing activities 3Shirly Ronen-Harel
 
Automated Web Testing With Selenium
Automated Web Testing With SeleniumAutomated Web Testing With Selenium
Automated Web Testing With SeleniumJodie Miners
 
Automatizacion de pruebas de software
Automatizacion de pruebas de softwareAutomatizacion de pruebas de software
Automatizacion de pruebas de softwareDavid Thomas
 
Taller cultura de calidad chimbote final
Taller cultura de calidad   chimbote finalTaller cultura de calidad   chimbote final
Taller cultura de calidad chimbote finalJorge Salas Ruiz
 
Automatización para todos los presupuestos - Sebastián Grattarola
Automatización para todos los presupuestos - Sebastián GrattarolaAutomatización para todos los presupuestos - Sebastián Grattarola
Automatización para todos los presupuestos - Sebastián GrattarolaGeneXus
 
¡Esta prueba tiene que automatizarse!
¡Esta prueba tiene que automatizarse!¡Esta prueba tiene que automatizarse!
¡Esta prueba tiene que automatizarse!GeneXus
 
Gestión de proyectos guiada por los beneficios
Gestión de proyectos guiada por los beneficiosGestión de proyectos guiada por los beneficios
Gestión de proyectos guiada por los beneficiosGeneXus
 
Testing automatizado, ¿qué futuro me espera? - Gonzalo Mancebo
Testing automatizado, ¿qué futuro me espera? - Gonzalo ManceboTesting automatizado, ¿qué futuro me espera? - Gonzalo Mancebo
Testing automatizado, ¿qué futuro me espera? - Gonzalo ManceboGeneXus
 
GX23 - GXtest 2.0: Automatización de pruebas para la nueva generación de apl...
GX23 - 	GXtest 2.0: Automatización de pruebas para la nueva generación de apl...GX23 - 	GXtest 2.0: Automatización de pruebas para la nueva generación de apl...
GX23 - GXtest 2.0: Automatización de pruebas para la nueva generación de apl...Abstracta
 
Build and test all, lo nuevo de GXtest para Desarrolladores
Build and test all, lo nuevo de GXtest para DesarrolladoresBuild and test all, lo nuevo de GXtest para Desarrolladores
Build and test all, lo nuevo de GXtest para DesarrolladoresAbstracta
 
Presentación corporativa testhouse consultores - v 3.9.1
Presentación corporativa   testhouse consultores - v 3.9.1Presentación corporativa   testhouse consultores - v 3.9.1
Presentación corporativa testhouse consultores - v 3.9.1Testhouse
 
La micea en la universidad cooperativa de colombia
La micea en la universidad cooperativa de colombiaLa micea en la universidad cooperativa de colombia
La micea en la universidad cooperativa de colombiajohnmario2501
 
15 16 keynote transición-desarrollador_líder
15 16 keynote transición-desarrollador_líder15 16 keynote transición-desarrollador_líder
15 16 keynote transición-desarrollador_líderSoftware Guru
 
Los Pecados Capitales en la Automatización de Pruebas de Software.
Los Pecados Capitales en la Automatización de Pruebas de Software.Los Pecados Capitales en la Automatización de Pruebas de Software.
Los Pecados Capitales en la Automatización de Pruebas de Software.Software Guru
 
Testing automatizado de aplicaciones web
Testing automatizado de aplicaciones webTesting automatizado de aplicaciones web
Testing automatizado de aplicaciones webAnibal Guzmán Miranda
 

Andere mochten auch (20)

Automatizacion De Pruebas De Software
Automatizacion De Pruebas De SoftwareAutomatizacion De Pruebas De Software
Automatizacion De Pruebas De Software
 
Automatización de pruebas funcionales
Automatización de pruebas funcionalesAutomatización de pruebas funcionales
Automatización de pruebas funcionales
 
Alta automatización de pruebas de calidad de software, cambio de paradigmas
Alta automatización de pruebas de calidad de software, cambio de paradigmasAlta automatización de pruebas de calidad de software, cambio de paradigmas
Alta automatización de pruebas de calidad de software, cambio de paradigmas
 
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriverPrueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
 
Tipos de pruebas de software
Tipos de pruebas de softwareTipos de pruebas de software
Tipos de pruebas de software
 
User story testing activities 3
User story testing activities 3User story testing activities 3
User story testing activities 3
 
Automated Web Testing With Selenium
Automated Web Testing With SeleniumAutomated Web Testing With Selenium
Automated Web Testing With Selenium
 
Automatizacion de pruebas de software
Automatizacion de pruebas de softwareAutomatizacion de pruebas de software
Automatizacion de pruebas de software
 
Taller cultura de calidad chimbote final
Taller cultura de calidad   chimbote finalTaller cultura de calidad   chimbote final
Taller cultura de calidad chimbote final
 
Automatización para todos los presupuestos - Sebastián Grattarola
Automatización para todos los presupuestos - Sebastián GrattarolaAutomatización para todos los presupuestos - Sebastián Grattarola
Automatización para todos los presupuestos - Sebastián Grattarola
 
¡Esta prueba tiene que automatizarse!
¡Esta prueba tiene que automatizarse!¡Esta prueba tiene que automatizarse!
¡Esta prueba tiene que automatizarse!
 
Gestión de proyectos guiada por los beneficios
Gestión de proyectos guiada por los beneficiosGestión de proyectos guiada por los beneficios
Gestión de proyectos guiada por los beneficios
 
Testing automatizado, ¿qué futuro me espera? - Gonzalo Mancebo
Testing automatizado, ¿qué futuro me espera? - Gonzalo ManceboTesting automatizado, ¿qué futuro me espera? - Gonzalo Mancebo
Testing automatizado, ¿qué futuro me espera? - Gonzalo Mancebo
 
GX23 - GXtest 2.0: Automatización de pruebas para la nueva generación de apl...
GX23 - 	GXtest 2.0: Automatización de pruebas para la nueva generación de apl...GX23 - 	GXtest 2.0: Automatización de pruebas para la nueva generación de apl...
GX23 - GXtest 2.0: Automatización de pruebas para la nueva generación de apl...
 
Build and test all, lo nuevo de GXtest para Desarrolladores
Build and test all, lo nuevo de GXtest para DesarrolladoresBuild and test all, lo nuevo de GXtest para Desarrolladores
Build and test all, lo nuevo de GXtest para Desarrolladores
 
Presentación corporativa testhouse consultores - v 3.9.1
Presentación corporativa   testhouse consultores - v 3.9.1Presentación corporativa   testhouse consultores - v 3.9.1
Presentación corporativa testhouse consultores - v 3.9.1
 
La micea en la universidad cooperativa de colombia
La micea en la universidad cooperativa de colombiaLa micea en la universidad cooperativa de colombia
La micea en la universidad cooperativa de colombia
 
15 16 keynote transición-desarrollador_líder
15 16 keynote transición-desarrollador_líder15 16 keynote transición-desarrollador_líder
15 16 keynote transición-desarrollador_líder
 
Los Pecados Capitales en la Automatización de Pruebas de Software.
Los Pecados Capitales en la Automatización de Pruebas de Software.Los Pecados Capitales en la Automatización de Pruebas de Software.
Los Pecados Capitales en la Automatización de Pruebas de Software.
 
Testing automatizado de aplicaciones web
Testing automatizado de aplicaciones webTesting automatizado de aplicaciones web
Testing automatizado de aplicaciones web
 

Ähnlich wie Pruebas Automatizadas

Ähnlich wie Pruebas Automatizadas (20)

Test Automation .NET
Test Automation .NETTest Automation .NET
Test Automation .NET
 
Unit Testing with Mock Objects
Unit Testing with Mock ObjectsUnit Testing with Mock Objects
Unit Testing with Mock Objects
 
Ingenieria de sw Junit
Ingenieria de sw JunitIngenieria de sw Junit
Ingenieria de sw Junit
 
Calidad del software cap3
Calidad del software   cap3Calidad del software   cap3
Calidad del software cap3
 
Testeo unitario
Testeo unitarioTesteo unitario
Testeo unitario
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmock
 
Taller de Simpletest - Drupal Day Valencia 2012
Taller de Simpletest - Drupal Day Valencia 2012Taller de Simpletest - Drupal Day Valencia 2012
Taller de Simpletest - Drupal Day Valencia 2012
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de software
 
Pruebas software con junit ..
Pruebas software con junit ..Pruebas software con junit ..
Pruebas software con junit ..
 
Prueba software orientado a objetos
Prueba software orientado a objetosPrueba software orientado a objetos
Prueba software orientado a objetos
 
Test unitarios
Test unitariosTest unitarios
Test unitarios
 
Pruebas unitarias
Pruebas unitariasPruebas unitarias
Pruebas unitarias
 
Pruebas
PruebasPruebas
Pruebas
 
Pruebade j unit
Pruebade j unitPruebade j unit
Pruebade j unit
 
Pruebade j unit
Pruebade j unitPruebade j unit
Pruebade j unit
 
Testing Con Visual Studio Team System 2008
Testing Con Visual Studio Team System 2008Testing Con Visual Studio Team System 2008
Testing Con Visual Studio Team System 2008
 
software testing
software testingsoftware testing
software testing
 
Tipos de pruebas de software
Tipos de pruebas de softwareTipos de pruebas de software
Tipos de pruebas de software
 
Pruebas-OCW.pdf
Pruebas-OCW.pdfPruebas-OCW.pdf
Pruebas-OCW.pdf
 
Conceptos básicos de Unit Test
Conceptos básicos de Unit Test Conceptos básicos de Unit Test
Conceptos básicos de Unit Test
 

Mehr von Angel Nuñez

Structural Agility
Structural AgilityStructural Agility
Structural AgilityAngel Nuñez
 
Architecting Sociotechnical Systems
Architecting Sociotechnical SystemsArchitecting Sociotechnical Systems
Architecting Sociotechnical SystemsAngel Nuñez
 
Product Development Flow
Product Development FlowProduct Development Flow
Product Development FlowAngel Nuñez
 
Hackeando la Cultura Organizacional
Hackeando la Cultura OrganizacionalHackeando la Cultura Organizacional
Hackeando la Cultura OrganizacionalAngel Nuñez
 
Liderazgo Transformacional
Liderazgo TransformacionalLiderazgo Transformacional
Liderazgo TransformacionalAngel Nuñez
 
Liderazgo Transformacional y DevOps
Liderazgo Transformacional y DevOpsLiderazgo Transformacional y DevOps
Liderazgo Transformacional y DevOpsAngel Nuñez
 
Exploratory Testing
Exploratory TestingExploratory Testing
Exploratory TestingAngel Nuñez
 
Kubernetes - Container Orchestration, Deployment and Scaling
Kubernetes - Container Orchestration, Deployment and ScalingKubernetes - Container Orchestration, Deployment and Scaling
Kubernetes - Container Orchestration, Deployment and ScalingAngel Nuñez
 
Agile Test Strategy
Agile Test StrategyAgile Test Strategy
Agile Test StrategyAngel Nuñez
 
Kubernetes - #gdglimasummit
Kubernetes - #gdglimasummitKubernetes - #gdglimasummit
Kubernetes - #gdglimasummitAngel Nuñez
 
Agile Testing - Software Testing Club
Agile Testing - Software Testing ClubAgile Testing - Software Testing Club
Agile Testing - Software Testing ClubAngel Nuñez
 
Kubernetes - #dockerconlima
Kubernetes  - #dockerconlimaKubernetes  - #dockerconlima
Kubernetes - #dockerconlimaAngel Nuñez
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as CodeAngel Nuñez
 
Test Driven Infrastructure
Test Driven InfrastructureTest Driven Infrastructure
Test Driven InfrastructureAngel Nuñez
 
Software Debt: Qué Es y Cómo Gestionarlo Holísticamente
Software Debt: Qué Es y Cómo Gestionarlo HolísticamenteSoftware Debt: Qué Es y Cómo Gestionarlo Holísticamente
Software Debt: Qué Es y Cómo Gestionarlo HolísticamenteAngel Nuñez
 
Refactoring to Patterns
Refactoring to PatternsRefactoring to Patterns
Refactoring to PatternsAngel Nuñez
 

Mehr von Angel Nuñez (20)

Structural Agility
Structural AgilityStructural Agility
Structural Agility
 
Architecting Sociotechnical Systems
Architecting Sociotechnical SystemsArchitecting Sociotechnical Systems
Architecting Sociotechnical Systems
 
Product Development Flow
Product Development FlowProduct Development Flow
Product Development Flow
 
Chaos Engineering
Chaos EngineeringChaos Engineering
Chaos Engineering
 
Hackeando la Cultura Organizacional
Hackeando la Cultura OrganizacionalHackeando la Cultura Organizacional
Hackeando la Cultura Organizacional
 
Liderazgo Transformacional
Liderazgo TransformacionalLiderazgo Transformacional
Liderazgo Transformacional
 
Liderazgo Transformacional y DevOps
Liderazgo Transformacional y DevOpsLiderazgo Transformacional y DevOps
Liderazgo Transformacional y DevOps
 
Exploratory Testing
Exploratory TestingExploratory Testing
Exploratory Testing
 
Coding Dojo
Coding DojoCoding Dojo
Coding Dojo
 
Kubernetes - Container Orchestration, Deployment and Scaling
Kubernetes - Container Orchestration, Deployment and ScalingKubernetes - Container Orchestration, Deployment and Scaling
Kubernetes - Container Orchestration, Deployment and Scaling
 
Agile Test Strategy
Agile Test StrategyAgile Test Strategy
Agile Test Strategy
 
Kubernetes - #gdglimasummit
Kubernetes - #gdglimasummitKubernetes - #gdglimasummit
Kubernetes - #gdglimasummit
 
Agile Testing - Software Testing Club
Agile Testing - Software Testing ClubAgile Testing - Software Testing Club
Agile Testing - Software Testing Club
 
Kubernetes - #dockerconlima
Kubernetes  - #dockerconlimaKubernetes  - #dockerconlima
Kubernetes - #dockerconlima
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as Code
 
Test Driven Infrastructure
Test Driven InfrastructureTest Driven Infrastructure
Test Driven Infrastructure
 
Software Debt: Qué Es y Cómo Gestionarlo Holísticamente
Software Debt: Qué Es y Cómo Gestionarlo HolísticamenteSoftware Debt: Qué Es y Cómo Gestionarlo Holísticamente
Software Debt: Qué Es y Cómo Gestionarlo Holísticamente
 
Unit testing
Unit testingUnit testing
Unit testing
 
Refactoring
RefactoringRefactoring
Refactoring
 
Refactoring to Patterns
Refactoring to PatternsRefactoring to Patterns
Refactoring to Patterns
 

Kürzlich hochgeladen

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 

Kürzlich hochgeladen (10)

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 

Pruebas Automatizadas

  • 1. AutomateTesting Email: snahider@gmail.com Blog: http://snahider.blogspot.com Twitter: @snahider Angel Núñez Salazar
  • 2. Tipos de Test Es una nomenclatura caótica y no existe una sola categoría. Alcance: Unidades, Componentes, Sistemas Etapa: Integración, aceptación, regresión Enfoque: Performance, funcionales Visibilidad: White / Black box El tipo de test se convierte en un atributo.
  • 3. Sistema Tipos de pruebas según su alcance + Integración Unitarios - Alcance
  • 4. Unit TestingAutomate Testing Email: snahider@gmail.com Blog: http://snahider.blogspot.com Twitter: @snahider Angel Núñez Salazar
  • 5. Pruebas Unitarias No pruebes el auto completo si aún no sabes si funcionan los engranes.
  • 6. Prueba Unitaria (Micro Test) Una prueba unitaria es un fragmento automatizado de código, escrito y mantenido por los desarrolladores, que invoca un método o función para verificar ciertas suposiciones sobre el comportamiento de una única clase.
  • 7. Nuestro Objetivo Probar las unidades lógicas o caminos que existen dentro de una clase.
  • 8.
  • 9. No depende de archivos de configuración.
  • 10.
  • 11. Beneficios de las pruebas unitarias Realizar cambios es mucho más sencillo. Nuevas funcionalidades no rompen las existentes. El proceso de desarrollo se vuelve más flexible. Los problemas se encuentran temprano en el ciclo de desarrollo. El diseño mejora debido a que el código es forzado a ser más desacoplado y testeable. Código que funciona ahora, funcionará en el futuro. La necesidad de pruebas manuales se reduce.
  • 12.
  • 13. Java: JUnit, TestNG, Easyb, JTiger …..
  • 14.
  • 15. Organización de un Proyecto Mantener las pruebas separadas del código de producción. Una clase de prueba por cada clase de producción. (Test Fixture per class) Proyecto de Producción Proyecto con las pruebas Referencia al proyecto de producción Test Framework
  • 16. Organización de un Proyecto Mantener las pruebas separadas del código de producción. Una clase de prueba por cada clase de producción. (Test Fixture per class) Directorio de producción Directorio con las pruebas Test Framework
  • 17. Creando una prueba Las pruebas se encuentran dentro de una clase marcada con un atributo Las pruebas son métodos marcados con un atributo La prueba pasa al menos que el assert falle o se produzca un error
  • 18. Creando una prueba Las pruebas se encuentran dentro de una clase. Las pruebas son métodos marcados con una anotación. La prueba pasa al menos que el assert falle o se produzca un error
  • 19. Asserts Métodos a través de los cuales podemos verificar el éxito o fracaso de nuestras pruebas. Múltiples sobre escrituras para verificar diversos casos. Si la verificación falla, nos devuelven un mensaje con información para poder solucionar el problema. Assert.AreEqualfailed. Expected: <2>, Actual:<0> Podemos agregar mensajes adicionales para que sean mostrados en caso el test falle. Assert.AreEqualfailed. Expected: <2>, Actual: <0>. 1+1 deberíaser 2
  • 20.
  • 22. Ejecutar las pruebas dentro del contexto actual (Ctrl+R,T)
  • 23.
  • 24. Menú contextual sobre la clase/package/proyecto y seleccionar "RunAs -> Junit Test".
  • 25.
  • 26. Incluir las entradas/estado inicial y el resultado esperado para dichas entradas.[NombreMétodo_EstadoEnPrueba_ComportamientoEsperado] Las convenciones nos permiten contar con reglas o plantillas que todo el equipo puede seguir para lograr un rápido entendimiento acerca de las pruebas.
  • 27. Estructura de una prueba Creamos todas las precondiciones y entradas necesarias. ARRANGE Realizamos la acción del objeto que estamos probando. ACT ASSERT Verificamos los resultados esperados.
  • 28. Nuestra segunda Prueba Realizar la prueba unitaria que verifique : «El Stack no se encuentra vacío si contiene un elemento»
  • 29.
  • 31.
  • 33.
  • 34.
  • 35.
  • 36. Ejemplos Set Up y Tear Down Unit Test Test Fixtures
  • 37. Ejemplos Set Up y Tear Down Unit Test Test Fixtures
  • 38. Probando Excepciones Forma Tradicional Utilizando Atributos
  • 39. Probando Excepciones Forma Tradicional Utilizando Atributos ExceptedException Rule
  • 40. EjercicioProbar una Excepción y utilizar un Set Up Crear una prueba para verificar que al obtener un elemento y el stack se encuentre vacío, se lance una excepción. Crear un método SetUp para remover el código duplicado de los test.
  • 41. Propiedades de una prueba unitaria Fast: Unos cuantos milisegundos en ejecutarse. Independent: Enfocarse en una única unidad de código. Repeatable: Ejecutarse de manera repetitiva sin intervención. Self-validating: Sin necesidad de reexaminar los resultados. Transparent: Comunicar claramente lo que se busca probar.
  • 42. Test DoublesAutomate Testing Email: snahider@gmail.com Blog: http://snahider.blogspot.com Twitter: @snahider Angel Núñez Salazar
  • 43. Testeabilidad La testeabilidad es un atributo de calidad del códigoque permite que las pruebas automatizadas sean realizadas de manera fácil y efectiva. La testeabilidad por lo general es señal de un buen diseño. Si queremos que un código sea testeable, debemos escribir pensando en la testeabilidad. No cualquier código puede ser probado de manera unitaria.
  • 44. EjercicioRevisar las pruebas realizadas a un código "no testeable" ¿Cuál es el problema del código de producción?"Es un código muy acoplado"
  • 45. ¿Cuál es el problema? Las clases de alto nivel no deben depender directamente de clases de bajo nivel sino de abstracciones de estas clases.
  • 46. Inversión de Dependencias Las clases de alto nivel no deben depender directamente de clases de bajo nivel sino de abstracciones de estas clases.
  • 47. Inyección de Dependencias Proveer las instancias de las clases dependencia desde fuera del ámbito de la clase. Outside
  • 48. EjercicioRefactorizar el código para mejorar su testeabilidad. Utilizar inyección e inversión de dependencias para desacoplar el código.
  • 49. ¿ Cuál es el siguiente paso ? Ahora que las clases no dependen de una implementación específica, debemos hacer que los test decidan cual es la dependencia a usar y la inyecten a la clase que se está probando.
  • 50. EjercicioModificar los test para realizar pruebas unitaras a clases con dependencias. Crear una nueva clase más simple que reemplace a la original solo para los propósitos de las pruebas.
  • 51. El Mundo Real BD Other Class Other Class Act Other Class Test ClassUnder Test FileSystem Assert Other Class Other Class
  • 52. ¿Cuál es el problema? Responsabilidades de la clase Creación de jerarquía de objetos Lógica de Negocios
  • 53. Encontrando la solución Responsabilidades de una clase externa Responsabilidades de la clase Creación de jerarquía de objetos Lógica de Negocios
  • 54. Encontrando la solución Simple Class Act Simple Class Test ClassUnder Test Assert Simple Class
  • 55. Test Doubles Test Double Test Double Son todos aquellos objetos que han sido creados para reemplazar a los objetos reales con el propósito de hacer pruebas
  • 56.
  • 59. Java: Mockito, EasyMock, Jmock
  • 60.
  • 62.
  • 63. La prueba tiene el control sobre este test double, por lo que puede indicarle respuestas predefinidas a ciertas llamadas.
  • 64.
  • 65. StateTesting VS InteractionTesting StateTesting (ResultDriven) Verificamos si un resultado final es el esperado.Ejm: que una propiedad ha cambiado su valor. InterationTesting (ActionDriven)Verificamos si una determinada acción se ha producido. Ejm: que se ha enviado un mensaje hacia otro objeto.
  • 66. Test Doubles: Mocks Nos permiten verificar si un objeto ha enviado o recibido un determinado mensaje de otro objeto. (Si un objeto ha interactuado correctamente con otro objeto)
  • 67.
  • 68. El Assert ya no se ejecuta sobre la clase en prueba sino sobre el mock.
  • 69.
  • 70. Como los diferenciamos fácilmente Stub: El Test Double que permite que el test pueda terminar su ejecución. Mock: El Test Double sobre el cuál se realiza un aserto.
  • 71.
  • 75.
  • 79.
  • 80. EjercicioRealizar pruebas unitarias a clases con dependencias IsEnabled debe retornar verdadero si el nivel del mensaje está antes al nivel del logger. IsEnabled debe retornar falso si el nivel del mensaje está después al nivel del logger. Writedebe enviar un email al administrador si el nivel es ERROR. Write debe escribir en el appender si el logger está habilitado.
  • 81.
  • 82. Java: Clover, EMMA, Cobertura
  • 83.
  • 84. Valor proporcional a la complejidad ciclomática.¿ Será suficiente pasar una única vez por un camino?
  • 85. Costo vs Beneficiode las pruebas unitarias Algoritmos Código complicado – Necesita refactorizar Alto Beneficio de la prueba ≈ Código no obvio Código Trivial Coordinadores Bajo Bajo Alto Costo de la prueba ≈ Número de dependencias Steven Sanderson Blog: http://bit.ly/lNGDjq
  • 86. EjercicioMedir el CodeCoverage en una aplicación. Medir el codecoverage utilizando las herramientas integradas dentro de los IDES. Analizar los resultados e identificar las áreas que no han sido ejercidas por ninguna prueba.
  • 87. ¿ Como escribimos código que sea difícil de probar ?
  • 88. «No hay ningún secreto en cómo escribir los tests,solo hay secretos en cómo escribir código testeable.» MiskoHevery
  • 89.
  • 90. No realizar trabajo en el constructor.
  • 91. Preferir la composición sobre la herencia.
  • 92.
  • 93.
  • 94. El operador New en el constructor.
  • 95. Cualquier tipo de llamada estática.
  • 96. Cualquier tipo de lógica (condicionales, iteraciones).
  • 97. Necesidad de llamar a un método «init» luego de la construcción del objeto.
  • 98. Tener un constructor para pruebas y otros para producción.
  • 99.
  • 100.
  • 101. Si no estamos sobrescribiendo, probablemente estemos abusando de la herencia.
  • 102.
  • 103. Integration TestingAutomate Testing Email: snahider@gmail.com Blog: http://snahider.blogspot.com Twitter: @snahider Angel Núñez Salazar
  • 104. Pruebas de Integración Se encargan de realizar pruebas a dos o más módulos dependientes de software.
  • 105. ¿ Cuando es una prueba de Integración ? Cuando involucra una o más clases en simultaneo. Cuando el código se comunica fuera de las fronteras de su propio proceso.(base de datos, la red, el sistema de archivos)
  • 106.
  • 107. Una buen conjunto de pruebas unitarias es aún más efectivo si es acompañado de otros tipos de test.
  • 108. Cada tipo de test es una nueva capa de protección en nuestro sistema.
  • 109.
  • 110. Las BDs usualmente contienen lógica y realizan funcionalidad crítica para las organizaciones.Es esencial contar con un conjunto de pruebas automatizadas que validen la integridad y funcionamiento de la base de datos.
  • 111. Las BDs son un terreno complicado. Malas herramientas. Los cambios se conservan. Actitud de los especialistas en BD. Diferencia entre el modelo conceptual de la aplicación y el modelo de la bb.
  • 112.
  • 115.
  • 118. ORM ( Metadata, Mappings)Outside (Data Access Interface)
  • 119. Prerrequisito: Sandboxes Un punto importante para tener pruebas repetibles y no erráticas es que cada prueba no se superponga.Esta tarea es más difícil si solo existe una única base de datos y todos ejecutando pruebas contra ella. DevelopmentSandbox DevelopmentSandbox IntegrationSandbox Demo/TestSandbox ProductionSandbox Proveer una base de datos diferente para cada actor o ambiente donde se vaya a ejecutar el conjunto de pruebas.
  • 120. ¿ Cómo probar ? La ClaveComenzar cada prueba con la base de datos en un estado conocido. Los Pasos 1.- Inicializar el estado de la base de datos. 2.- Ejecutar la prueba. 3.- Restablecer (limpiar) el estado para la siguiente prueba.
  • 121.
  • 122. Se puede combinar con patrones como: test data builder, objectmother.
  • 123.
  • 124. Las frameworks permiten utilizar funcionalidad más avanzada.
  • 125. Necesita una organización para los archivos (por tabla, por conjunto de pruebas, por prueba).
  • 126. El mantenimiento de la pruebas es más difícil ya que también se tienen que mantener los archivos externos.
  • 127.
  • 128.
  • 129. Poco impacto en el tiempo de ejecución de las pruebas.
  • 130.
  • 131.
  • 132. EjercicioRealizar pruebas de BD utilizando"Pruebas Autosuficientes""Transaction - Rollback" Implementar los enfoques "Pruebas Autosuficientes" y "TransactionRollback" . Analizar que factores adicionales se deben considerar cuando se utiliza un ORM.
  • 133. Notas