Scala Language
Tests avec ScalaCheck
Recherche…
Introduction
ScalaCheck est une bibliothèque écrite en Scala et utilisée pour des tests automatisés basés sur les propriétés de programmes Scala ou Java. ScalaCheck a été inspiré à l'origine par la bibliothèque QuickCheck de la bibliothèque Haskell, mais s'est également aventuré dans la sienne.
ScalaCheck n'a pas d'autres dépendances externes que l'exécution de Scala et fonctionne parfaitement avec l'outil de génération Scala. Il est également totalement intégré dans les frameworks de test ScalaTest et specs2.
Scalacheck avec scalatest et messages d'erreur
Exemple d'utilisation de scalacheck avec scalatest. Ci-dessous, nous avons quatre tests:
- "show pass example" - ça passe
- "affichez un exemple simple sans message d'erreur personnalisé" - le message a simplement échoué sans les détails, l'opérateur
&&
boolean est utilisé - "show example with error messages on argument" - message d'erreur sur l'argument (
"argument" |:
:) La méthode Props.all est utilisée à la place de&&
- "show example with error messages on command" - message d'erreur sur la commande (
"command" |:
:) La méthode Props.all est utilisée à la place de&&
import org.scalatest.prop.Checkers
import org.scalatest.{Matchers, WordSpecLike}
import org.scalacheck.Gen._
import org.scalacheck.Prop._
import org.scalacheck.Prop
object Splitter {
def splitLineByColon(message: String): (String, String) = {
val (command, argument) = message.indexOf(":") match {
case -1 =>
(message, "")
case x: Int =>
(message.substring(0, x), message.substring(x + 1))
}
(command.trim, argument.trim)
}
def splitLineByColonWithBugOnCommand(message: String): (String, String) = {
val (command, argument) = splitLineByColon(message)
(command.trim + 2, argument.trim)
}
def splitLineByColonWithBugOnArgument(message: String): (String, String) = {
val (command, argument) = splitLineByColon(message)
(command.trim, argument.trim + 2)
}
}
class ScalaCheckSpec extends WordSpecLike with Matchers with Checkers {
private val COMMAND_LENGTH = 4
"ScalaCheckSpec " should {
"show pass example" in {
check {
Prop.forAll(listOfN(COMMAND_LENGTH, alphaChar), alphaStr) {
(chars, expArgument) =>
val expCommand = new String(chars.toArray)
val line = s"$expCommand:$expArgument"
val (c, p) = Splitter.splitLineByColon(line)
Prop.all("command" |: c =? expCommand, "argument" |: expArgument =? p)
}
}
}
"show simple example without custom error message " in {
check {
Prop.forAll(listOfN(COMMAND_LENGTH, alphaChar), alphaStr) {
(chars, expArgument) =>
val expCommand = new String(chars.toArray)
val line = s"$expCommand:$expArgument"
val (c, p) = Splitter.splitLineByColonWithBugOnArgument(line)
c === expCommand && expArgument === p
}
}
}
"show example with error messages on argument" in {
check {
Prop.forAll(listOfN(COMMAND_LENGTH, alphaChar), alphaStr) {
(chars, expArgument) =>
val expCommand = new String(chars.toArray)
val line = s"$expCommand:$expArgument"
val (c, p) = Splitter.splitLineByColonWithBugOnArgument(line)
Prop.all("command" |: c =? expCommand, "argument" |: expArgument =? p)
}
}
}
"show example with error messages on command" in {
check {
Prop.forAll(listOfN(COMMAND_LENGTH, alphaChar), alphaStr) {
(chars, expArgument) =>
val expCommand = new String(chars.toArray)
val line = s"$expCommand:$expArgument"
val (c, p) = Splitter.splitLineByColonWithBugOnCommand(line)
Prop.all("command" |: c =? expCommand, "argument" |: expArgument =? p)
}
}
}
La sortie (fragments):
[info] - should show example // passed
[info] - should show simple example without custom error message *** FAILED ***
[info] (ScalaCheckSpec.scala:73)
[info] Falsified after 0 successful property evaluations.
[info] Location: (ScalaCheckSpec.scala:73)
[info] Occurred when passed generated values (
[info] arg0 = List(), // 3 shrinks
[info] arg1 = ""
[info] )
[info] - should show example with error messages on argument *** FAILED ***
[info] (ScalaCheckSpec.scala:86)
[info] Falsified after 0 successful property evaluations.
[info] Location: (ScalaCheckSpec.scala:86)
[info] Occurred when passed generated values (
[info] arg0 = List(), // 3 shrinks
[info] arg1 = ""
[info] )
[info] Labels of failing property:
[info] Expected "" but got "2"
[info] argument
[info] - should show example with error messages on command *** FAILED ***
[info] (ScalaCheckSpec.scala:99)
[info] Falsified after 0 successful property evaluations.
[info] Location: (ScalaCheckSpec.scala:99)
[info] Occurred when passed generated values (
[info] arg0 = List(), // 3 shrinks
[info] arg1 = ""
[info] )
[info] Labels of failing property:
[info] Expected "2" but got ""
[info] command
Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow