Kotest és un framework de testing multiplatforma flexible i elegant per a Kotlin amb assertions extensives i property testing integrat.
Introducció
kotest és un framework modular que actualment consisteix en tres mòduls principals: Test Framework, Assertions Library, i Property Testing.
Pots utilitzar tots els mòduls junts si vols, però res t’impedirà triar només els que necessitis i mesclar-los amb altres frameworks o biblioteques de testing.
Configuració
El framework de testing Kotest és compatible amb JVM, Javascript i Native.
Per incloure’l al teu modul Amper amb producte jvm/app
, només cal que defineixis les següents dependències:
product: jvm/apptest-dependencies: - io.kotest:kotest-framework-engine:6.0.3 - io.kotest:kotest-runner-junit5:6.0.3 - $kotlin.reflect - org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2
Instal·la el plugin per Kotlin - Idea
Escrivint tests
Utilitzant les funcionalitats del llenguatge disponibles a Kotlin, Kotest és capaç de proporcionar una aproximació més potent i alhora senzilla per definir tests.
A Kotest un test és essencialment només una funció TestContext -> Unit
que conté la teva lògica de test.
Qualsevol sentència assert (matchers en la nomenclatura de Kotest) invocada en aquesta funció que llenci una excepció serà interceptada pel framework i utilitzada per marcar aquell test com a fallat o amb èxit.
Les funcions de test no es defineixen manualment, sinó que s’utilitza el DSL de Kotest, que proporciona diverses maneres en què aquestes funcions es poden crear i anidar. El DSL s’accedeix creant una classe que estén d’una classe que implementa un estil de testing particular.
Per exemple, utilitzant l’estil Fun Spec, pots crear funcions de test utilitzant la paraula clau test
, proporcionant un nom i la funció de test actual.
import io.kotest.core.spec.style.FunSpecimport io.kotest.matchers.shouldBe
class FunSpecTest: FunSpec({ test("2 plus 2 should be 4") { (2 + 2) shouldBe 4 }})
.\amper test
Tingues en compte que els tests s’han de definir dins d’un bloc init {}
o una lambda del cos de la classe com en l’exemple anterior.
Test Framework
El Test Framework és el mòdul central de Kotest.
Els tests de Kotest són versàtils i es poden executar en entorns JVM, Javascript i Native, fent-lo un framework de testing multiplataforma.
Estils de testing
Kotest ofereix 10 estils diferents de disposició de tests. Alguns estan inspirats en altres frameworks de testing populars per fer que et sentis com a casa. Altres es van crear només per a Kotest.
Per utilitzar Kotest, crea un fitxer de classe que estengui d’un dels estils de test. Després, dins d’un bloc init { }
, crea els teus casos de test.
No hi ha diferències funcionals entre els estils. Tots permeten els mateixos tipus de configuració — fils, etiquetes, etc. — és simplement una qüestió de preferència com estructuris els teus tests.
La següent taula conté els estils de test que pots triar:.
Estil de Test | Inspirat per |
---|---|
Fun Spec | ScalaTest |
Describe Spec | Javascript frameworks and RSpec |
Should Spec | A Kotest original |
String Spec | A Kotest original |
Behavior Spec | BDD frameworks |
Free Spec | ScalaTest |
Word Spec | ScalaTest |
Feature Spec | Cucumber |
Expect Spec | A Kotest original |
Annotation Spec (JVM only) | JUnit |
Alguns equips prefereixen obligar l’ús d’un únic estil, altres barregen i combinen. No hi ha cap resposta correcta o incorrecta - fes el que se senti correcte per al teu equip.
Fun Spec
FunSpec et permet crear tests invocant una funció anomenada test amb un argument string per descriure el test, i després el test en si com una lambda.
Si tens dubtes, aquest és l’estil a utilitzar.
class FunSpecTest : FunSpec({
test("2 plus 2 should be 4") { (2 + 2) shouldBe 4 }
test("String length should return the length of the string") { "sammy".length shouldBe 5 "".length shouldBe 0 }})
Els tests es poden desactivar utilitzant les variants xcontext
i xtest
(a més de les maneres habituals)