Scala Language
Тестирование с помощью ScalaCheck
Поиск…
Вступление
ScalaCheck - это библиотека, написанная на Scala и используемая для автоматизированного тестирования программ Scala или Java на основе свойств. ScalaCheck был первоначально вдохновлен библиотекой QuickBook от Haskell, но также отважился на нее.
ScalaCheck не имеет внешних зависимостей, кроме среды выполнения Scala, и отлично работает с sbt, инструментом сборки Scala. Он также полностью интегрирован в тестовые платформы ScalaTest и spec2.
Scalacheck с сообщениями scalatest и сообщения об ошибках
Пример использования scalache с использованием scalatest. Ниже мы проведем четыре теста:
- «показать пример передачи» - он проходит
- «показать простой пример без настраиваемого сообщения об ошибке» - просто сообщение об ошибке без подробностей, используется
&&
boolean operator - «показать пример с сообщениями об ошибках в аргументе» - сообщение об ошибке в аргументе (
"argument" |:
:) Вместо&&
используется метод Props.all - «показать пример с сообщениями об ошибках в команде» - сообщение об ошибке в команде (
"command" |:
:) Вместо&&
используется метод Props.all
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)
}
}
}
Выход (фрагменты):
[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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow