2017-12-16 8 views
0

私はScalaTestとScalaCheckを使用しています。 r1Arbitrary[AuthUser]を入力しますが、私はどのようにそれを得るために、AuthUserが必要であることを、どのように定義されて任意の?

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) => 

     ??? 
    }) 
    } 
} 

問題がある:私は、次のようにカスタム・ジェネレータと任意のジェネレータを書きましたか?

答えて

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) 
    } 
} 
関連する問題