Translate

lunes, 12 de septiembre de 2022

Properties scala tests


Tengo una función tipo : 

def fx(n: Int) : Long = if (n == 0 || n == 1) 1 else fx(n - 1) + fx(n - 2) 


Puedo escribir test de forma endemoniada, para saber si esta bien o puedo utilizar properties de Scala check. 


Primero importo scala check : 

libraryDependencies += "org.scalameta" %% "munit-scalacheck" % "0.7.29" % Test


En el parametro version, mejor si utlizo, la más actual. 

Ahora puedo escribir una property : 


import munit.ScalaCheckSuite

import org.scalacheck.Prop._


class FxSuite extends ScalaCheckSuite {

  val domain: Gen[Int] = Gen.choose(3, 47) 

  property("Fx(n) is Fx(n -1) + Fx(n -2)") {

    forAll { (n: Int) =>

      fx(n) == fx(n -1) + fx(n -2)

    }

  }

}


Y con esto podemos probar que esta propiedad de esta función se cumpla, en el código podemos ver la definición del dominio, es decir con esto va a probar desde 3 a 47. 

Como conclusión podemos decir que una propiedad puede ser cualquier característica de comportamiento de un método u objeto que debería cumplirse en cualquier situación. Pruebas basadas en propiedades viene de la comunidad de programación funcional: QuickCheck de Haskell

Dejo link : https://scalameta.org/munit/docs/integrations/scalacheck.html