Kotlin - Kotest

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:

module.yaml
product: jvm/app
test-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.

test/FuncSpecTest.kt
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.shouldBe
class FunSpecTest: FunSpec({
test("2 plus 2 should be 4") {
(2 + 2) shouldBe 4
}
})
Terminal window
.\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 TestInspirat per
Fun SpecScalaTest
Describe SpecJavascript frameworks and RSpec
Should SpecA Kotest original
String SpecA Kotest original
Behavior SpecBDD frameworks
Free SpecScalaTest
Word SpecScalaTest
Feature SpecCucumber
Expect SpecA Kotest original
Annotation Spec (JVM only)JUnit
Nota

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.

test/FuncSpecTest.kt
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)

Activitat

Activitat

Mira el reste d’estils a Kotest - Testing styles.

Escriu el test i verifica que funciona.

Pendent