Slide 1

Slide 1 text

Adictos al verde @kinisoftware

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Para empezar ... ¡un teeeest, un teeeest, un teeeeest!

Slide 4

Slide 4 text

¿Por qué hacer tests

Slide 5

Slide 5 text

! . Queremos a nuestros clientes . Dormir por las noches . ¿Habré roto algo? . Pero, si esto antes funcionaba ¿no? !

Slide 6

Slide 6 text

El escenario de un test

Slide 7

Slide 7 text

¿Problemas?

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

¿Cómo debería ser?

Slide 11

Slide 11 text

Testability ...

Slide 12

Slide 12 text

! . Mixing object graph construction with application logic . Ask for things, Don’t look for things . Doing work in constructor . Global State/Singletons . Static methods ! ! Vigila… http://www.youtube.com/watch?v=acjvKJiOvXw

Slide 13

Slide 13 text

Tipos de Tests

Slide 14

Slide 14 text

http://lisacrispin.com/2011/11/08/using-the-agile-testing-quadrants/

Slide 15

Slide 15 text

by Martin Fowler http://martinfowler.com/bliki/TestPyramid.html

Slide 16

Slide 16 text

Toolbox ...

Slide 17

Slide 17 text

Repetible ! Automatizable* ! Expresivo ! Fácil de hacer ! Relevante ! Self-Verifying AAA

Slide 18

Slide 18 text

Hamcrest assertThat(theBiscuit, equalTo(myBiscuit)); assertThat(theBiscuit, is(equalTo(myBiscuit))); assertThat(theBiscuit, is(myBiscuit)); ! assertThat(Math.sqrt(-1), is(notANumber())); ! assertThat(myArray, hasItemInArray(item)); ! assertThat(person.getAge(), is(greaterThan(LEGAL_AGE))); !

Slide 19

Slide 19 text

Test de Aceptacion

Slide 20

Slide 20 text

A formal test conducted to determine whether or not a system satisfies its acceptance criteria and to enable the customer to determine whether or not to accept the system. Acceptance tests are different from UnitTests in that UnitTests are modeled and written by the developer of each class, while the acceptance test is at least modeled and possibly even written by the customer. http://c2.com/cgi/wiki?AcceptanceTest

Slide 21

Slide 21 text

Colaboración con el cliente ! Lenguaje Natural ! DSL ! Definir una historia de usuario ! ¿UI?

Slide 22

Slide 22 text

http://kinisoftware.com/2012/03/bdd-java-que-framework-uso/ KIF

Slide 23

Slide 23 text

La pregunta de la audiencia: ¿Cómo hacer test de UI menos frágiles? UI ! Selenium/Webdriver al rescate! ! Page Objects ! API

Slide 24

Slide 24 text

Test de Integración

Slide 25

Slide 25 text

Un test que combina varias partes de la aplicación de tal forma que buscamos el resultado de la colaboración conjunta. Puede involucrar un escenario “end-to-end” o simplemente varios componentes. Suelen ser tentadores porque “cuestan menos de hacer” que los unitarios pero no os dejéis llevar…

Slide 26

Slide 26 text

Test Unitarios

Slide 27

Slide 27 text

A kind of AutomatedTest, though some would say a better name is DeveloperTest ! "Unit" casually refers to low-level test cases written in the same language as the production code, which directly access its objects and members. ! Under the strict definition, for QA purposes, the failure of a UnitTest implicates only one unit. You know exactly where to search to find the bug. http://c2.com/cgi/wiki?UnitTest

Slide 28

Slide 28 text

http://pragprog.com/magazines/2012-01/unit-tests-are-first Fast ! Isolated ! Repeatable ! Self-Verifing ! Timely/Transparent F.I.R.S.T.

Slide 29

Slide 29 text

Toolbox ...

Slide 30

Slide 30 text

Stubs - Respuestas programadas ! Mocks - Expectaciones (Stubs+) ! Spies - Guardan información ! Fake - Similar al recurso de producción ! Dummy - No hace nada at all :) Dobles

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

BDD/TDD ...

Slide 33

Slide 33 text

Design Patterns Bad Smells http://www.jbrains.ca/permalink/the-four-elements-of-simple-design Passes its tests Minimized duplication Maximize clarity Has fewer elements SOLID Simple Design:

Slide 34

Slide 34 text

¿Y mañana qué? Empieza a escribir tests, de alguno de los tipos que hemos visto ! Intenta automatizar la construcción del proyecto y la ejecución de test ! Si puedes haz BDD/TDD ! Estudia sobre la parte de “Refactoring” ! Evangeliza

Slide 35

Slide 35 text

¡Gracias! ... @kinisoftware

Slide 36

Slide 36 text

Engineering Jobs

Slide 37

Slide 37 text

Recursos (I) BDD + UI + Selenium - http://thomassundberg.wordpress.com/2012/11/01/a-jsf-web-application/ Page Objects - https://code.google.com/p/selenium/wiki/PageObjects Mockito Examples - http://gojko.net/2009/10/23/mockito-in-six-easy-examples/ Libro TDD de Carlos Ble - http://www.dirigidoportests.com/el-libro Code Smells - http://www.codinghorror.com/blog/2006/05/code-smells.html Code Smell - http://c2.com/cgi/wiki?CodeSmell xUnit Patterns - http://xunitpatterns.com/ Refactoring Catalog - http://www.refactoring.com/

Slide 38

Slide 38 text

Recursos (II) Hamcrest for iOS - https://github.com/hamcrest/OCHamcrest Mockito for iOS - https://github.com/jonreid/OCMockito Acceptance/Integration testing iOS - https://github.com/kif-framework/KIF TDD for iOS - http://www.amazon.com/Test-Driven-iOS-Development-Developers-Library/dp/ 0321774183 Esta presentación - https://www.dropbox.com/s/658csb9s1xppfts/AdictoAlVerde.pdf Megalibro - http://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627