Как использовать Specs2 со Scalacheck для автоматизации тестирования строковых аргументов?

Переписанная среда тестирования specs2 для Scala объединяет автоматическое тестирование с скалачек. Примеры, приведенные в документации specs2 о том, как использовать scalacheck вместе с specs2 либо используйте целые числа или более сложные пользовательские генераторы, как в примере Эрика json .

Пытаясь заставить работать немного менее сложный пример, я борюсь, потому что не знаю, как можно использовать specs2 и scalacheck, если я хочу генерировать строковые аргументы вместо целых чисел. Как бы этот пример Quickstart


import org.scalacheck._

object StringSpecification extends Properties("String") { property("startsWith") = Prop.forAll((a: String, b: String) => (a+b).startsWith(a))

property("endsWith") = Prop.forAll((a: String, b: String) => (a+b).endsWith(b))

// Is this really always true? property("concat") = Prop.forAll((a: String, b: String) => (a+b).length > a.length && (a+b).length > b.length )

property("substring") = Prop.forAll((a: String, b: String) => (a+b).substring(a.length) == b )

property("substring") = Prop.forAll((a: String, b: String, c: String) => (a+b+c).substring(a.length, a.length+b.length) == b ) }

взято с главной страницы scalacheck, если она была написана как спецификация Specs2 с использованием интеграции scalacheck?


person Steffen    schedule 07.06.2011    source источник


Ответы (2)


Очень прямой перевод использует метод check и простые функции:

package test

import org.specs2._
import org.scalacheck._

class ScalaCheckExamples extends Specification with ScalaCheck { def is =

  "startsWith" ! check { (a: String, b: String) => (a+b).startsWith(a) }                                                ^
  "endsWith"   ! check { (a: String, b: String) => (a+b).endsWith(b) }                                                  ^
  "concat"     ! check { (a: String, b: String) => (a+b).length > a.length && (a+b).length > b.length }                 ^
  "substring"  ! check { (a: String, b: String) => (a+b).substring(a.length) == b }                                     ^
  "substring"  ! check { (a: String, b: String, c: String) => (a+b+c).substring(a.length, a.length+b.length) == b }     ^
                                                                                                                        end
 }

И вывод фактически показывает, что свойство concat неверно:

  [info] + startsWith
  [info] + endsWith
  [error] x concat
  [error]   A counter-example is ['', ''] (after 0 try)
  [error] the value is false
  [error]  (ScalaCheckExamplesSpec.scala:6)
  [info] + substring
  [info] + substring
  [info]
  [info] Total for specification ScalaCheckExamplesSpec
  [info] Finished in 7 seconds, 547 ms
  [info] 5 examples, 401 expectations, 1 failure, 0 error
  [info]

Эрик.

person Eric    schedule 07.06.2011
comment
Спасибо за этот ответ. Это действительно прояснило некоторые вещи для меня. Может быть, вы хотите добавить этот пример в дерево кода примеров? - person Steffen; 08.06.2011

Для получения дополнительной информации об использовании библиотеки ScalaCheck в specs2 ознакомьтесь со ссылкой Руководство по ScalaCheck в документации spec2.

person apolune    schedule 09.02.2012
comment
Я получил HTTP 404 для вышеуказанного сайта. - person Kevin Meredith; 08.07.2016
comment
@KevinMeredith Попробуйте этот etorreborre.github. io/specs2/guide/SPECS2-3.9.1/ - person Vigneshwaran; 08.08.2017