class: center, middle, inverse # Proves de programari (Testing) ### Tests unitaris --- # Què són els testos en programació - Són programes que executen altres funcions. - Validen si el codi retorna l'esperat o executa una sèrie d'events. --- # Test Unitari - Realitzar proves sobre els components o unitats més petits del codi font d'una aplicació o d'un sistema - Generalment, un mètode o rutina - En kotlin, quan s'executa sobre JVM podem usar JUnit --- # Intelij JUnit -JUnit és un testing framework .right-image[![](img/junit5-logo.png)] https://kotlinlang.org/docs/jvm-test-using-junit.html#create-a-test --- # Junit5 - Necessitem importar les llibreries de Junit5 : __org.junit.jupiter:junit-jupiter:5.7.0__ - A l'arxiu build.grale.kts modificarem l'apartat de dependències i ens quedarà així: ``` dependencies { implementation("org.junit.jupiter:junit-jupiter:5.7.0") testImplementation(kotlin("test")) } ``` - I en aquest mateix arxiu afegirem tasks.test ``` tasks.test { useJUnitPlatform() } ``` --- # Test de funcions - Exemple Crea el fitxer SumFunction amb el següent codi. ``` fun sum(a: Int, b: Int): Int { return a + b } ``` Volem comprovar que sigui correcte --- # Test de funcions - Exemple - Fes clic esquerra sobre la funció - generate -> test - Si indica que junit5 no està configurat fes clic a fix - Clic a ok --- # Exemple - test ``` internal class SampleFuncionsKtTest { @Test fun sum() { val expected = 42 assertEquals(expected, sum(40, 2)) } } ``` --- # Exemple - test ``` internal class SampleFuncionsKtTest { @Test fun sum() { val expected = 42 assertEquals(expected, sum(40, 2)) } @Test fun sumForNegativeValues() { val expected = -50 assertEquals(expected, sum(-100, 50)) } } ``` --- # Missatges d'error ``` internal class SampleFuncionsKtTest { @Test fun `no esta sumant els valors 40 i 2 correctament`() { val expected = 42 assertEquals(expected, sum(40, 2)) } @Test fun sum() { val expected = 42 assertEquals(expected, sum(40, 2), "No està sumant els valors 40 i 2 correctament") } } ``` --- # Test - Error ``` fun sum(a: Int, b: Int): Int { return a * b } ``` --- # Altres asserts - assertEquals(expected, result) - assertNotEquals(expected, result) - assertTrue(boolea) - assertNull(objecte) - assertSame(obj,obj) - [Assert](http://junit.sourceforge.net/javadoc/org/junit/Assert.html ) --- # Asserts - Per cada mètode només hauríem de tenir un assert. - Quan un assert falla no es continuen executant els asserts d'aquest mateix mètode. - És més dificil saber d'on prové l'error --- # Coverage - Ens indica quines parts del codi han estat testades --- # Estructura - Per poder fer testos hem de tenir el codi ben estructurat - Separació en funcions - Separar els càlculs del print/scanner - Farem el test dels càlculs --- # Documentació [tdd with kotlin](https://www.jetbrains.com/help/idea/tdd-with-kotlin.html)