Как использовать Specs2 с Scalacheck для автоматизации тестирования аргументов String? - PullRequest
9 голосов
/ 07 июня 2011

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

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

<code>
import org.scalacheck._</p>

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

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

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

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

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

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

Ответы [ 2 ]

17 голосов
/ 08 июня 2011

Очень прямой перевод использует метод 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]

Эрик.

2 голосов
/ 09 февраля 2012

Для получения дополнительной информации об использовании библиотеки ScalaCheck в specs2, посмотрите Руководство по Matchers в документации specs2: http://etorreborre.github.com/specs2/guide/org.specs2.guide.Matchers.html#ScalaCheck+properties.

...