SlideShare uma empresa Scribd logo
1 de 62
Baixar para ler offline
Framework Grails
Sesión 6: Framework de test Spock.
12
Índice
Introducción a los tests
Framework de test Spock
Spock en Grails
Introducción a los tests
¿Qué son los tests?
Tipos de tests de software
Otros frameworks de tests
¿Qué son los tests?
Los tests de software se pueden definir como el proceso
empleado para comprobar la corrección de un programa
informático y se puede considerar como una parte más en el
proceso del control de calidad.
Tipos de tests de software
Tests unitarios
Tests de integración
Tests funcionales
Otros frameworks de tests
JUnit
TestNG
Características de Spock
Fácil de aprender
Integración con Groovy
Eliminación aserciones innecesarias
Información detallada en las salidas de los tests
Diseñado desde el punto de vista del usuario
TDD, BDD, etc
Lenguaje altamente expresivo
Compatible con JUnit
Combina ideas de otros frameworks como JUnit o jMock
Instalación de Spock en Grails
BuildConfig.groovy
grails.project.dependency.resolution={
repositories{
grailsCentral()
mavenCentral()
}
dependencies{
test"org.spockframework:spock-grails-support:0.7-groovy-2.0"
}
plugins{
test(":spock:0.7"){
exclude"spock-grails-support"
}
}
}
Instalación de Spock en Grails
grailstest-app
Tests en Spock
Extienden spock.lang.Specification
packagees.ua.expertojava.todo
importspock.lang.Specification
classMyFirstTestextendsSpecification{
def"Eloperadorsumafuncionacorrectamente"(){
expect:
10==2+8
and:
10==0+10
and:
10==10+0
}
}
A tener en cuenta
Sintaxis muy sencilla de leer
Nombre de los métodos entrecomillados
No son necesarias las aserciones
Tests en Spock
def"Elmétodoplusdelosnúmerosfuncionacorrectamente"(){
when:
defresult=10.plus(2)
then:
result==12
}
A tener en cuenta
Bloque when lanza el método a probar
Bloque then comprueba la respuesta
Tests en Spock
@Unroll
def"Elmétodoplusfuncionaconelsumador#sumadoryelsumando#sumando"(){
when:
defresult=sumador.plus(sumando)
then:
result==resultadoEsperado
where:
sumador| sumando | resultadoEsperado
0 | 0 | 0
0 | 1 | 1
1 | 1 | 2
-1 | 0 | -1
0 | -1 | -1
-1 | -1 | -2
2 | 1 | 3
}
A tener en cuenta
Tenemos una batería de pruebas con datos diferentes
Utilizamos placeholders en el nombre del test
Unroll despliega cada conjunto de datos como un test
nuevo
Resultado sin @Unroll
Tests en Spock
@Unroll
def"Elmétodoplusfuncionaconelsumador#sumadoryelsumando#sumandoutilizandolistas"(){
when:
defresult=sumador.plus(sumando)
then:
result==resultadoEsperado
where:
sumador<<[0,0,1,-1,0,-1,2]
sumando<<[0,1,1,0,-1,-1,1]
resultadoEsperado<<[0,1,2,-1,-1,-2,3]
}
Tests en Spock
def"Elmétodoparaconcatenarcadenasañadeunsigno+entrelascadenasconcatenadas"(){
given:
String.metaClass.concat={Stringc->
"${delegate}+${c}"
}
expect:
"cadena1".concat("cadena2")=="cadena1+cadena2"
cleanup:
String.metaClass=null
}
A tener en cuenta
Bloque given para preparar el test
Bloque cleanup para dejar las cosas como estaban
Spock en Grails
Tests sobre clases de dominio
Tests sobre contraladores
Tests sobre librerías de etiquetas, vistas y plantillas
Tests sobre servicios
Tests mockeando objetos
Algunas anotaciones interesantes
Métodos predefinidos
setupSpec(), se ejecuta antes del primer test de una
determinada clase de tests con Spock
cleanupSpec(), se ejecuta después del último test de una
determinada clase de tests con Spock
setup(), se ejecuta antes de cada test de una determinada
clase de tests con Spock
setupSpec(), se ejecuta después de cada test de una
determinada clase de tests con Spock
Tests sobre clases de dominio en Grails
packagees.ua.expertojava.todo
classCategory{
Stringname
Stringdescription
statichasMany=[todos:Todo]
staticconstraints={
name(blank:false)
description(blank:true,nullable:true,maxSize:1000)
}
StringtoString(){
name
}
}
Tests sobre clases de dominio en Grails
packagees.ua.expertojava.todo
importgrails.test.mixin.TestFor
importspock.lang.Specification
importspock.lang.Unroll
/**
*SeetheAPIfor{@linkgrails.test.mixin.domain.DomainClassUnitTestMixin}forusageinstructions
*/
@TestFor(Category)
classCategorySpecextendsSpecification{
defsetup(){
}
defcleanup(){
}
...
Tests sobre clases de dominio en Grails
def"Elnombredelacategoríanopuedeserlacadenavacía"(){
given:
defc1=newCategory(name:"")
when:
c1.validate()
then:
c1?.errors['name']
}
Tests sobre clases de dominio en Grails
def"Sielnombrenoeslacadenavacía,estecamponodaráproblemas"(){
given:
defc1=newCategory(name:"algo")
when:
c1.validate()
then:
!c1?.errors['name']
}
Tests sobre clases de dominio en Grails
def"Siladescripcióneslacadenavacía,estecamponodaráproblemas"(){
given:
defc1=newCategory(description:"")
when:
c1.validate()
then:
!c1?.errors['description']
}
Tests sobre clases de dominio en Grails
def"Ladescripcióndelacategoríapuedesernull"(){
given:
defc1=newCategory(description:null)
when:
c1.validate()
then:
!c1?.errors['description']
}
Tests sobre clases de dominio en Grails
@Unroll
def"Siladescripcióntienemenosde1001caracteres,nodaráproblemas"(){
given:
defc1=newCategory(description:"a"*characters)
when:
c1.validate()
then:
!c1?.errors['description']
where:
characters<<[0,1,999,1000]
}
Tests sobre clases de dominio en Grails
@Unroll
def"Siladescripcióntienemás1000caracteres,daráproblemas"(){
given:
defc1=newCategory(description:"a"*characters)
when:
c1.validate()
then:
c1?.errors['description']
where:
characters<<[1001,1002]
}
Tests sobre clases de dominio en Grails
def"LainstanciadeCategoríadevuelvesunombrepordefecto"(){
expect:
newCategory(name:"Thecategoryname").toString()=="Thecategoryname"
}
pto. Ciencia de la Computación e I.A. Sesión 6
Tests sobre controladores en Grails
packagees.ua.expertojava.todo
importgrails.test.mixin.*
importspock.lang.*
@TestFor(CategoryController)
@Mock(Category)
classCategoryControllerSpecextendsSpecification{
defpopulateValidParams(params){
assertparams!=null
//TODO:Populatevalidpropertieslike...
//params["name"]='someValidName'
}
...
Tests sobre controladores en Grails
defpopulateValidParams(params){
assertparams!=null
params["name"]='Categoryname'
}
Tests sobre controladores en Grails
grailstest-appCategoryControllerSpecunit:
Tests sobre controladores en Grails
packagees.ua.expertojava.todo
importgrails.test.mixin.*
importspock.lang.*
@TestFor(CategoryController)
@Mock(Category)
classCategoryControllerSpecextendsSpecification{
defpopulateValidParams(params){
assertparams!=null
params["name"]='Categoryname'
}
...
}
Tests sobre controladores en Grails
void"Testtheindexactionreturnsthecorrectmodel"(){
when:"Theindexactionisexecuted"
controller.index()
then:"Themodeliscorrect"
!model.categoryInstanceList
model.categoryInstanceCount==0
}
Tests sobre controladores en Grails
void"Testthecreateactionreturnsthecorrectmodel"(){
when:"Thecreateactionisexecuted"
controller.create()
then:"Themodeliscorrectlycreated"
model.categoryInstance!=null
}
Tests sobre controladores en Grails
void"Testthesaveactioncorrectlypersistsaninstance"(){
when:"Thesaveactionisexecutedwithaninvalidinstance"
request.contentType=FORM_CONTENT_TYPE
request.method='POST'
defcategory=newCategory()
category.validate()
controller.save(category)
then:"Thecreateviewisrenderedagainwiththecorrectmodel"
model.categoryInstance!=null
view=='create'
when:"Thesaveactionisexecutedwithavalidinstance"
response.reset()
populateValidParams(params)
category=newCategory(params)
controller.save(category)
Tests sobre controladores en Grails
void"Testthattheshowactionreturnsthecorrectmodel"(){
when:"Theshowactionisexecutedwithanulldomain"
controller.show(null)
then:"A404errorisreturned"
response.status==404
when:"Adomaininstanceispassedtotheshowaction"
populateValidParams(params)
defcategory=newCategory(params)
controller.show(category)
then:"Amodelispopulatedcontainingthedomaininstance"
model.categoryInstance==category
}
Tests sobre controladores en Grails
void"Testthattheeditactionreturnsthecorrectmodel"(){
when:"Theeditactionisexecutedwithanulldomain"
controller.edit(null)
then:"A404errorisreturned"
response.status==404
when:"Adomaininstanceispassedtotheeditaction"
populateValidParams(params)
defcategory=newCategory(params)
controller.edit(category)
then:"Amodelispopulatedcontainingthedomaininstance"
model.categoryInstance==category
}
Tests sobre controladores en Grails
void"Testthatthedeleteactiondeletesaninstanceifitexists"(){
when:"Thedeleteactioniscalledforanullinstance"
request.contentType=FORM_CONTENT_TYPE
request.method='DELETE'
controller.delete(null)
then:"A404isreturned"
response.redirectedUrl=='/category/index'
flash.message!=null
when:"Adomaininstanceiscreated"
response.reset()
populateValidParams(params)
defcategory=newCategory(params).save(flush:true)
then:"Itexists"
Category.count()==1
when:"Thedomaininstanceispassedtothedeleteaction"
A tener en cuenta
Variables inyectadas: controller, model, view, response,
request y flash
Anotación @Mock
Ejecutar controller.method()
Variable model para comprobar el modelo devuelto
Redirecciones con response.redirectedUrl
Tests sobre librerías de etiquetas, vistas y
plantillas
defincludeJs={attrs->
out<<"<scriptsrc="scripts/${attrs['script']}.js"></script>"
}
Tests sobre librerías de etiquetas, vistas y
plantillas
void"LaetiquetaincludeJsdevuelveunareferenciaalalibreríajavascriptpasadaporparámetro"(){
expect:
applyTemplate('<todo:includejsscript=""></todo:includejs>')=="<scriptsrc="scripts/.js"
applyTemplate('<todo:includejsscript="myfile"></todo:includejs>')=="<scriptsrc="scripts/myf
}
Tests sobre librerías de etiquetas, vistas y
plantillas
void"Elpiedepáginaserenderizacorrectamente"(){
when:
defresult=render(template:'/common/footer')
then:
result=="<divclass=""footer""role=""contentinfo"">n"+
" ©2015ExpertoenDesarrollodeAplicacionesWebconJavaEEyJavascript<br>n"+
" AplicaciónTodocreadaporFranciscoJoséGarcíaRico(21.542.334F)n"+
"</div>"
}
Tests sobre servicios en Grails
packagees.ua.expertojava.todo
importgrails.test.mixin.TestFor
importspock.lang.Specification
/**
*SeetheAPIfor{@linkgrails.test.mixin.services.ServiceUnitTestMixin}forusageinstructions
*/
@TestFor(TodoService)
classTodoServiceSpecextendsSpecification{
defsetup(){
}
defcleanup(){
}
void"testsomething"(){
}
Tests sobre servicios en Grails
defgetNextTodos(Integerdays,params){
Datenow=newDate(System.currentTimeMillis())
Dateto=now+days
Todo.findAllByDateBetween(now,to,params)
}
Tests sobre servicios en Grails
void"ElmétodogetNextTodosdevuelvelossiguientestodosdelosdíaspasadoporparámetro"(){
given:
deftodoDayBeforeYesterday=newTodo(title:"Tododaybeforeyesterday",date:newDate()-
deftodoYesterday=newTodo(title:"Todoyesterday",date:newDate()-1)
deftodoToday=newTodo(title:"Todotoday",date:newDate())
deftodoTomorrow=newTodo(title:"Todotomorrow",date:newDate()+1)
deftodoDayAfterTomorrow=newTodo(title:"Tododayaftertomorrow",date:newDate()+
deftodoDayAfterDayAfterTomorrow=newTodo(title:"Tododayaftertomorrow",date:newDate()+
and:
mockDomain(Todo,[todoDayBeforeYesterday,todoYesterday,todoToday,todoTomorrow,todoDayAfterTo
and:
defnextTodos=service.getNextTodos(2,[:])
expect:
Todo.count()==6
and:
nextTodos.containsAll([todoTomorrow,todoDayAfterTomorrow])
nextTodos.size()==2
and:
!nextTodos.contains(todoDayBeforeYesterday)
Tests con Spock mockeando objetos
@Unroll
void"ElmétodoprintIconFromBooleandevuelveunarutaaunaimagen"(){
when:
defoutput=applyTemplate('<todo:printiconfrombooleanvalue="${value}"></todo:printiconfromboo
then:
output==expectedOutput
where:
value | expectedOutput
true | "icontrue.png"
false | "iconfalse.png"
}
Tests con Spock mockeando objetos
@Unroll
void"ElmétodoprintIconFromBooleandevuelveunarutaaunaimagen"(){
given:
defassetsTagLib=Mock(AssetsTagLib)
tagLib.metaClass.asset=assetsTagLib
when:
defoutput=applyTemplate('<todo:printiconfrombooleanvalue="${value}"></todo:printiconfromboo
then:
output==expectedOutput
and:
1*assetsTagLib.image(_)>>{value?"icontrue.png":"iconfalse.png"}
where:
value | expectedOutput
true | "icontrue.png"
false | "iconfalse.png"
}
A tener en cuenta
Mockeamos la librería AssetsTagLib
Indicamos cuantas interacciones se van a producir con
nuestro objecto mockeado
Utilizamos placeholder para los parámetros
Algunas anotaciones interesantes
@Ignore
@Ignore
def"myfeature"(){...}
@Ignore
classMySpecextendsSpecification{...}
@Ignore(reason="TODO")
def"myfeature"(){...}
Algunas anotaciones interesantes
@IgnoreRest
def"I'llbeignored"(){...}
@IgnoreRest
def"I'llrun"(){...}
def"I'llalsobeignored"(){...}
Algunas anotaciones interesantes
@IgnoreIf
@IgnoreIf({System.getProperty("os.name").contains("windows")})
def"I'llruneverywherebutonWindows"(){...}
Algunas anotaciones interesantes
@IgnoreIf
sys, un mapa con todas las propiedades del sistema
env, un mapa con todas las variables de entorno
os, información acerca del sistema operativo
jvm, información sobre la máquina virtual de Java
Algunas anotaciones interesantes
@Requires
@Requires({os.windows})
def"I'llonlyrunonWindows"(){...}
Algunas anotaciones interesantes
@Stepwise
Respeta el orden de los tests
Algunas anotaciones interesantes
@Timeout
@Timeout(5)
def"IfailifIrunformorethanfiveseconds"(){...}
@Timeout(value=100,unit=TimeUnit.MILLISECONDS)
def"Ibetterbequick"{...}
Algunas anotaciones interesantes
@Timeout
@Timeout(10)
classTimedSpecextendsSpecification{
def"Ifailaftertenseconds"(){...}
def"Metoo"(){...}
@Timeout(value=250,unit=MILLISECONDS)
def"Ifailmuchfaster"(){...}
}
Algunas anotaciones interesantes
@ConfineMetaClassChanges
@Stepwise
classFooSpecextendsSpecification{
@ConfineMetaClassChanges
def"Irunfirst"(){
when:
String.metaClass.someMethod={delegate}
then:
String.metaClass.hasMetaMethod('someMethod')
}
def"Irunsecond"(){
when:
"Foo".someMethod()
then:
thrown(MissingMethodException)
}
}
Algunas anotaciones interesantes
@ConfineMetaClassChanges
@Title("Thisiseasytoread")
classThisIsHarderToReadSpecextendsSpecification{
...
}
@Narrative(""""
Asauser
Iwantfoo
Sothatbar
""")
classGiveTheUserFooSpec(){...}
¿Preguntas...?
Ejercicios

Mais conteúdo relacionado

Mais procurados

Junit con netbeans
Junit con netbeansJunit con netbeans
Junit con netbeans
bachispasaca
 
Jobsket.com, Grails en un proyecto real
Jobsket.com, Grails en un proyecto realJobsket.com, Grails en un proyecto real
Jobsket.com, Grails en un proyecto real
Jobsket
 

Mais procurados (20)

Node para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoNode para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigo
 
Testing Ruby on Rails (spanish)
Testing Ruby on Rails (spanish)Testing Ruby on Rails (spanish)
Testing Ruby on Rails (spanish)
 
Symfony Pruebas Unitarias
Symfony Pruebas UnitariasSymfony Pruebas Unitarias
Symfony Pruebas Unitarias
 
Java script tarea
Java script tareaJava script tarea
Java script tarea
 
Taller Grails
Taller GrailsTaller Grails
Taller Grails
 
Eleva tu capacidad con Groovy
Eleva tu capacidad con GroovyEleva tu capacidad con Groovy
Eleva tu capacidad con Groovy
 
Gradle vs Maven
Gradle vs MavenGradle vs Maven
Gradle vs Maven
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
 
Java 9, 10, 11 ,12, 13 and more
Java 9, 10, 11 ,12, 13 and moreJava 9, 10, 11 ,12, 13 and more
Java 9, 10, 11 ,12, 13 and more
 
Junit con netbeans
Junit con netbeansJunit con netbeans
Junit con netbeans
 
Taller PyConEs 2016: Introducción a TDD
Taller PyConEs 2016: Introducción a TDDTaller PyConEs 2016: Introducción a TDD
Taller PyConEs 2016: Introducción a TDD
 
El coste de no usar integración continua
El coste de no usar integración continuaEl coste de no usar integración continua
El coste de no usar integración continua
 
Jobsket.com, Grails en un proyecto real
Jobsket.com, Grails en un proyecto realJobsket.com, Grails en un proyecto real
Jobsket.com, Grails en un proyecto real
 
Continuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudioContinuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudio
 
Grails en Expo FISI 2011
Grails en Expo FISI 2011Grails en Expo FISI 2011
Grails en Expo FISI 2011
 
Pucela testingdays testing_en_php
Pucela testingdays testing_en_phpPucela testingdays testing_en_php
Pucela testingdays testing_en_php
 
Intro a Grails @ ITESCA
Intro a Grails @ ITESCAIntro a Grails @ ITESCA
Intro a Grails @ ITESCA
 
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015 Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
 
Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!
 
Workshop - Pruebas Unitarias (con Java)
Workshop - Pruebas Unitarias (con Java)Workshop - Pruebas Unitarias (con Java)
Workshop - Pruebas Unitarias (con Java)
 

Destaque

000030 ejercicos resueltos quimica general disoluciones
000030 ejercicos resueltos quimica general disoluciones000030 ejercicos resueltos quimica general disoluciones
000030 ejercicos resueltos quimica general disoluciones
Dianitha Lopez Barboza
 
Working with the AOSP - Linaro Connect Asia 2013
Working with the AOSP - Linaro Connect Asia 2013Working with the AOSP - Linaro Connect Asia 2013
Working with the AOSP - Linaro Connect Asia 2013
Opersys inc.
 

Destaque (20)

Fisica iii practica nº1
Fisica iii practica nº1Fisica iii practica nº1
Fisica iii practica nº1
 
000030 ejercicos resueltos quimica general disoluciones
000030 ejercicos resueltos quimica general disoluciones000030 ejercicos resueltos quimica general disoluciones
000030 ejercicos resueltos quimica general disoluciones
 
Groovy&Grails: desarrollo rápido de aplicaciones
Groovy&Grails: desarrollo rápido de aplicacionesGroovy&Grails: desarrollo rápido de aplicaciones
Groovy&Grails: desarrollo rápido de aplicaciones
 
Certificaciones Tecnológicas: La acreditación del experto
Certificaciones Tecnológicas: La acreditación del expertoCertificaciones Tecnológicas: La acreditación del experto
Certificaciones Tecnológicas: La acreditación del experto
 
Privacidad internet
Privacidad internetPrivacidad internet
Privacidad internet
 
Herramientas gestion proyectos
Herramientas gestion proyectosHerramientas gestion proyectos
Herramientas gestion proyectos
 
Inteligencia Colectiva
Inteligencia ColectivaInteligencia Colectiva
Inteligencia Colectiva
 
Certificaciones tecnológicas
Certificaciones tecnológicasCertificaciones tecnológicas
Certificaciones tecnológicas
 
Por su seguridad
Por su seguridadPor su seguridad
Por su seguridad
 
Seguridad en dispositivos móviles
Seguridad en dispositivos móvilesSeguridad en dispositivos móviles
Seguridad en dispositivos móviles
 
Kanban
KanbanKanban
Kanban
 
Practica calificada fisica i.a
Practica calificada  fisica  i.aPractica calificada  fisica  i.a
Practica calificada fisica i.a
 
Git and git flow
Git and git flowGit and git flow
Git and git flow
 
Manual de uso de la web 2.0
Manual de uso de la web 2.0Manual de uso de la web 2.0
Manual de uso de la web 2.0
 
Practica calificada fisica i.b
Practica calificada  fisica  i.bPractica calificada  fisica  i.b
Practica calificada fisica i.b
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
Working with the AOSP - Linaro Connect Asia 2013
Working with the AOSP - Linaro Connect Asia 2013Working with the AOSP - Linaro Connect Asia 2013
Working with the AOSP - Linaro Connect Asia 2013
 
Estática ii
Estática iiEstática ii
Estática ii
 
Metodologías agiles de desarrollo de software
Metodologías agiles de desarrollo de softwareMetodologías agiles de desarrollo de software
Metodologías agiles de desarrollo de software
 
Testing NodeJS Security
Testing NodeJS SecurityTesting NodeJS Security
Testing NodeJS Security
 

Semelhante a Framework de test spock

Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmock
kaolong
 
pruebasunitarias-110921232512-phpapp02.pptx
pruebasunitarias-110921232512-phpapp02.pptxpruebasunitarias-110921232512-phpapp02.pptx
pruebasunitarias-110921232512-phpapp02.pptx
CompusoftnetCiaLtda
 

Semelhante a Framework de test spock (20)

Test unitarios
Test unitariosTest unitarios
Test unitarios
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
TDD: ¿Cómo escribir código testeable?
TDD: ¿Cómo escribir código testeable?TDD: ¿Cómo escribir código testeable?
TDD: ¿Cómo escribir código testeable?
 
Pruebas Automatizadas
Pruebas AutomatizadasPruebas Automatizadas
Pruebas Automatizadas
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
Testing & debugging lightning web components
Testing & debugging lightning web componentsTesting & debugging lightning web components
Testing & debugging lightning web components
 
Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytest
 
Seminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring InsightSeminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring Insight
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmock
 
Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
 
Grails barcamp 2013
Grails barcamp 2013Grails barcamp 2013
Grails barcamp 2013
 
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
 
TDD
TDDTDD
TDD
 
Msdn Webcast InyeccióN De Dependencias Con Spring Framework
Msdn Webcast   InyeccióN De Dependencias Con Spring FrameworkMsdn Webcast   InyeccióN De Dependencias Con Spring Framework
Msdn Webcast InyeccióN De Dependencias Con Spring Framework
 
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
 
pruebasunitarias-110921232512-phpapp02.pptx
pruebasunitarias-110921232512-phpapp02.pptxpruebasunitarias-110921232512-phpapp02.pptx
pruebasunitarias-110921232512-phpapp02.pptx
 
Pruebas
PruebasPruebas
Pruebas
 
Pruebas unitarias
Pruebas unitariasPruebas unitarias
Pruebas unitarias
 
Drupal grunt task - Drupal Camp CR 2015
Drupal grunt task  - Drupal Camp CR 2015Drupal grunt task  - Drupal Camp CR 2015
Drupal grunt task - Drupal Camp CR 2015
 
software testing
software testingsoftware testing
software testing
 

Último

Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplos
andersonsubero28
 
3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf
3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf
3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf
GustavoAdolfoDiaz3
 

Último (20)

3er Informe Laboratorio Quimica General (2) (1).pdf
3er Informe Laboratorio Quimica General  (2) (1).pdf3er Informe Laboratorio Quimica General  (2) (1).pdf
3er Informe Laboratorio Quimica General (2) (1).pdf
 
docsity-manzaneo-y-lotizacion para habilitacopm urbana
docsity-manzaneo-y-lotizacion para habilitacopm urbanadocsity-manzaneo-y-lotizacion para habilitacopm urbana
docsity-manzaneo-y-lotizacion para habilitacopm urbana
 
Arquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo LimacheArquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo Limache
 
portafolio final manco 2 1816827 portafolio de evidencias
portafolio final manco 2 1816827 portafolio de evidenciasportafolio final manco 2 1816827 portafolio de evidencias
portafolio final manco 2 1816827 portafolio de evidencias
 
Presentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potablePresentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potable
 
27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
 
Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplos
 
3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf
3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf
3.6.2 Lab - Implement VLANs and Trunking - ILM.pdf
 
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdfNTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
 
ARMADURAS METODO NODOS.pptx......................
ARMADURAS METODO NODOS.pptx......................ARMADURAS METODO NODOS.pptx......................
ARMADURAS METODO NODOS.pptx......................
 
libro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operacioneslibro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operaciones
 
5. MATERIALES petreos para concreto.pdf.
5. MATERIALES petreos para concreto.pdf.5. MATERIALES petreos para concreto.pdf.
5. MATERIALES petreos para concreto.pdf.
 
GUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdf
GUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdfGUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdf
GUIA DE SEGURIDAD PARA VENTILACION DE MINAS-POSITIVA.pdf
 
Clasificación de Equipos e Instrumentos en Electricidad.docx
Clasificación de Equipos e Instrumentos en Electricidad.docxClasificación de Equipos e Instrumentos en Electricidad.docx
Clasificación de Equipos e Instrumentos en Electricidad.docx
 
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEstadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
 
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
 
Six Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo processSix Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo process
 
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf  PARA TRABAJO SEGUROATS-FORMATO cara.pdf  PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
 

Framework de test spock