Как определить Произвольный?

Я использую ScalaTest и ScalaCheck. Я написал собственный генератор и произвольный генератор следующим образом:

import java.time.LocalDateTime

import org.scalacheck._
import org.scalatest.PropSpec
import org.scalatest.prop.Checkers
import Gen._
import Arbitrary.arbitrary


class AuthJwtSpec extends PropSpec with Checkers {

  private val start = LocalDateTime.now.atZone(java.time.ZoneId.systemDefault()).toEpochSecond
  private val end = LocalDateTime.now.plusDays(2).atZone(java.time.ZoneId.systemDefault()).toEpochSecond
  private val pickTime = Gen.choose(start, end)

  private val authUser: Arbitrary[AuthUser] =
    Arbitrary {
      for {
        u <- arbitrary[String]
        p <- arbitrary[String]
      } yield AuthUser(u, p)
    }

  property("Generate JWT token.") {
    check(Prop.forAll(authUser, pickTime) {(r1: AuthUser, r2: Long) =>

      ???
    })
  }
}

Проблема в том, что r1 имеет тип Arbitrary[AuthUser], а мне нужен AuthUser, как его получить?


person softshipper    schedule 16.12.2017    source источник


Ответы (1)


Как я вижу, проблема с полем authUser — оно должно быть Gen[AuthUser], а не Arbitary[AuthUser]:

import java.time.LocalDateTime

import org.scalacheck._
import org.scalatest._
import prop._

case class AuthUser(u: String, p: String)

class AuthJwtSpec extends PropSpec with Checkers with PropertyChecks  {
  private val start = LocalDateTime.now.atZone(java.time.ZoneId.systemDefault()).toEpochSecond
  private val end = LocalDateTime.now.plusDays(2).atZone(java.time.ZoneId.systemDefault()).toEpochSecond

  private val pickTime: Gen[Long] = Gen.choose(start, end)

  // AuthUser should be Gen[AuthUser], not Arbitary[AuthUser]
  private val authUser: Gen[AuthUser] =
      for {
        u <- Arbitrary.arbitrary[String]
        p <- Arbitrary.arbitrary[String]
      } yield AuthUser(u, p)

  property("Generate JWT token.") {
    val prop = Prop.forAll(authUser, pickTime) {(user: AuthUser, time: Long) =>
      println(s"User: $user")
      println(s"Time: $time")
      // Property checks must always return true or false
      true
    }
    check(prop)
  }
}
person Artavazd Balayan    schedule 16.12.2017