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